Cover by Vandad Nahavandipoor

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

O'Reilly logo

5.2. Accessing Variables in Block Objects

Problem

You want to understand the difference between accessing variables in Objective-C methods and accessing those variables in block objects.

Solution

Here is a brief summary of what you must know about variables in block objects:

  • Local variables in block objects work exactly the same as in Objective-C methods.

  • For inline block objects, local variables constitute not only variables defined within the block, but also the variables that have been defined in the method that implements that block object. (Examples will come shortly.)

  • You cannot refer to self in independent block objects implemented in an Objective-C class. If you need to access self, you must pass that object to the block object as a parameter. We will see an example of this soon.

  • You can refer to self in an inline block object only if self is present in the lexical scope inside which the block object is created.

  • For inline block objects, local variables that are defined inside the block object’s implementation can be read from and written to. In other words, the block object has read-write access to variables defined inside the block object’s body.

  • For inline block objects, variables local to the Objective-C method that implements that block can only be read from, not written to. There is an exception, though: a block object can write to such variables if they are defined with the __block storage type. We will see an example of this as well.

  • Suppose you have an object of type NSObject ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required