Jon*_*an. 16 iphone exc-bad-access objective-c objective-c-blocks
据我所知,Block就像一个对象,因为你可以向它发送复制或释放消息,例如:
[myBlock copy];
Run Code Online (Sandbox Code Playgroud)
但是每当我这样做或释放一个块时,我都会得到EXC_BAD_ACCESS.
如果我使用块函数,一切都按预期工作,例如:
Block_copy(myBlock);
Run Code Online (Sandbox Code Playgroud)
我认为释放和复制块的两种方式都是相同的?
这不是一个问题,但如果我有一个Block的属性(副本)有点烦人,我必须自己编写setter方法.
例如:使用属性:
//Header
@property (nonatomic, copy) void (^cancelledBlock)(void);
//Implementation
@sythesize cancelledBlock;
Run Code Online (Sandbox Code Playgroud)
设置时会导致EXC_BAD_ACCESS cancelledBlock
但如果我这样做:
//Header
@property (nonatomic, copy) void (^cancelledBlock)(void);
//Implementation
@sythesize cancelledBlock; //saves me doing the getter as well
- (void)setCancelledBlock:(void (^)(void))aCancelledBlock {
if (cancelledBlock == aCancelledBlock) {
return;
}
void (^oldValue)(void) = cancelledBlock;
cancelledBlock = Block_copy(aCancelledBlock);
Block_release(oldValue);
}
Run Code Online (Sandbox Code Playgroud)
没有EXC_BAD_ACCESS,一切都按预期运行.
| 归档时间: |
|
| 查看次数: |
3513 次 |
| 最近记录: |