据我所知,块的行为类似于对象,因为您可以向它发送复制或释放消息,例如:

[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替换它。

09-04 15:38