Pio*_*pla 76 objective-c objective-c-blocks
我想将objective-c块存储在属性中供以后使用.我不知道该怎么做所以我google了一下,关于这个主题的信息很少.但我最终设法找到了解决方案,我认为可能值得为像我这样的其他新手分享.
最初我认为我需要手动编写属性才能使用Block_copy和Block_release.
幸运的是,我发现块是NSObjects和- copy/ - release等价于Block_copy/ Block_release.所以我可以@property (copy)用来自动生成setter和getter.
Dav*_*ong 135
编辑:更新为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();
Run Code Online (Sandbox Code Playgroud)
Ste*_*mer 98
或者,没有typedef
@property (copy, nonatomic) void (^selectionHandler) (NSDictionary*) ;
您可以在第83页开始的WWDC 2012会话712中找到对此的非常好的解释.在ARC下保存块的正确方法如下:
@property(strong) my_block_type work;
Run Code Online (Sandbox Code Playgroud)
小心保留周期.一个好的解决方法是在不再需要时将块设置为nil:
self.work = nil;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
39594 次 |
| 最近记录: |