How to store blocks in properties in Objective-C?

objective-c, objective-c-blocks

Solution

Edit: updated for ARC

typedef void(^MyCustomBlock)(void);

@interface MyClass : NSObject

@property (nonatomic, copy) MyCustomBlock customBlock;

@end

@implementation MyClass

@end

MyClass * c = [[MyClass alloc] init];
c.customBlock = ^{
  NSLog(@"hello.....");
}

c.customBlock();

Problem

I'd like to store objective-c block in a property for later use. I wasn't sure how to do it so I googled a bit and there is very little info about the subject. But I've managed to find the solution eventually and I've thought that it might be worth sharing for other newbies like me. Initially I've thought that I would need to write the properties by hand to use Block_copy & Block_release. Fortunately I've found out that blocks are NSObjects and `- copy`/`- release` is equivalent to `Block_copy`/`Block_release`. So I can use `@property (copy)` to auto generate setters & getters.

Original source

Related problems