Under ARC, are Blocks automatically copied when assigned to an ivar via the property?
automatic-ref-counting, objective-c, objective-c-blocks, properties
Solution
bearMountain,
The easiest way to ensure the block is copied is to, in fact, set the `@property` to use copy. As in:
@property (copy, nonatomic) MyResponseHandler ivarResponseHandler;
It does everything you need.
Andrew
Problem
Assume ``` typedef void (^MyResponseHandler) (NSError *error); @property (strong, nonatomic) MyResponseHandler ivarResponseHandler; synthesize ivarResponseHandler = _ivarResponseHandler; - (void)myMethod:(MyResponseHandler)responseHandler { self.ivarResponseHandler = responseHandler; ... } ``` Is the assignment to the ivar through the `@property` correct? I know that in manual memory management you would have needed `self.ivarResponseHandler = [responseHandler copy];` to make sure the block was copied from the stack to the heap. But watching Session 322 - Objective-C Advancements in Depth (minute 25) from WWDC 2011, the speaker says that ARC automatically handles the assignment of a block to an ivar. I just wanted to make sure.