如何在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;