据我所知,块的行为类似于对象,因为您可以向它发送复制或释放消息,例如:
[myBlock copy];
但是,每当我这样做,或释放一个块,我得到exc_bad_访问。
如果我使用块函数,一切都按预期工作,例如:
Block_copy(myBlock);
我认为释放和复制块的两种方法是相同的?
这不是什么大问题,但是如果我有一个属性(copy)是一个块,我就必须自己编写setter方法,这有点烦人。
例如:使用属性:
//Header
@property (nonatomic, copy) void (^cancelledBlock)(void);
//Implementation
@sythesize cancelledBlock;
设置
cancelledBlock
时导致exc_bad_访问但如果我这样做了:
//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);
}
没有exc_bad_访问权限,一切正常运行。
最佳答案
经过一个漫长而乏味的下午和晚上,我终于遇到了这个“AA>”,尽管它似乎不相关,但我访问的网站链找到了它。
基本上,我必须从链接器标志中删除-weak_library /usr/lib/libSystem.B.dylib
,并用-weak-lSystem
替换它。