On 28 Jan 2012, at 20:50, R wrote:

> That is precisely what is giving me the confusion.  If retained the
> received block in a NSMutableArray, the block should stick around (via
> a strong array pointer) for another method.  It only stays around if I
> equate the block to a typedef variable and then put that variable in
> the array.  I'm using ARC.

Blocks are allocated on the stack, unlike other objective-C objects. As a 
consequence, they cannot be retained and are destroyed with the stack. That 
means they must be copied to the heap explicitly to be available beyond the 
scope they were created in, as Ken Thomases wrote.  
With ARC, blocks are normally copied to the heap automatically as required. 
However, adding an object to a container implicitly casts it to id, which is 
not automatically copied with ARC. Hence, you must copy it explicitly.

Mikkel
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to