Consider this:
id observer = [[NSNotificationCenter defaultCenter]
addObserverForName:MyNotification
object:nil
Yes, using __block
will solve the problem.
Without it, the Block gets a copy of the variable's value at the time the Block is created. (Which is "uninitialized" in this case.) With it, the Block (in essence) gets the variable itself, so that the value can be changed from within the Block. Thus it will also "track" changes made from outside.