Do recall ( from chapter 8 ) that you, as the programmer, are not responsible for releasing objects from class that you did not created. NSNumber is. What you done is slightly wrong (however, it's almost right) as you wrote this:
// The wrong way
NSNumber *myInt1 = [NSNumber numberWithInt: 100];
NSNumber *myInt1 = [NSNumber numberWithInt: 200];
Once you declare an pointer to an object, you do not need to re-declare it again unless it is already destroy. (Actually, I think that if you re-declare it, it cause problems; I'm not sure on this though.)
The more correct way is this:
// The correct way
NSNumber *myInt1 = [NSNumber numberWithInt: 100];
myInt1 = [NSNumber numberWithInt: 200];
As you can see, I declare a pointer call myInt1 pointing to a NSNumber with the integer100. Reassigning a value to myInt1 is fine.
Steve (or some other expert), please tell me if my answer is right or not (as I'm not completely faithful if I answer correctly)!