如何在Objective-C中的属性中存储块?

我想存储一个属性中的Objective-C块供以后使用。 我不知道该怎么做,所以我search了一下,关于这个主题的信息很less。 但是我终于find了解决scheme,我认为这可能是值得像我这样的新手分享的。

最初我以为我需要手工编写属性来使用Block_copy&Block_release。

幸运的是,我发现块是NSObjects , - copy / - release等同于Block_copy / Block_release 。 所以我可以使用@property (copy)来自动生成setters和getters。

编辑:更新为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(); 

另外,没有typedef

@property (copy, nonatomic) void (^selectionHandler) (NSDictionary*) ;

您可以在第83页开始的WWDC 2012会话712中find对此的非常好的解释。在ARC下保存块的正确方法如下:

 @property(strong) my_block_type work; 

小心保留周期。 要解决的一个好办法是把块设置为零,当你不再需要它时:

 self.work = nil;