iphone - EXC_BAD_ACCESS 复制或保留 Block 时

标签 iphone objective-c exc-bad-access objective-c-blocks

据我所知,Block 就像一个对象,您可以向它发送复制或发布消息,例如:

[myBlock copy];

但是,每当我这样做或释放一个 block 时,我都会得到 EXC_BAD_ACCESS。

如果我使用 block 函数,一切都会按预期工作,例如:

Block_copy(myBlock);

我以为释放和复制 block 的两种方式是相同的?

这不是什么大问题,但有点烦人的是,如果我有一个属性(副本)是一个 block ,我必须自己编写 setter 方法。

例如:具有属性:

//Header
@property (nonatomic, copy) void (^cancelledBlock)(void);

//Implementation
@sythesize cancelledBlock;

设置 cancelledBlock 时导致 EXC_BAD_ACCESS

但如果我这样做:

//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_ACCESS,一切正常运行。

最佳答案

经过漫长而无聊的下午和晚上,我终于看到了这个 answer here ,虽然它可能看起来无关,但我为找到它而访问的网站链创建了这种关系。

基本上我必须从链接器标志中删除 -weak_library/usr/lib/libSystem.B.dylib 并将其替换为 -weak-lSystem

关于iphone - EXC_BAD_ACCESS 复制或保留 Block 时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7111541/

相关文章:

iphone - 使用过滤器更改 UITextView 链接的颜色?

objective-c - 正弦 180 的值为 1.22465e-16

objective-c - EXC_BAD_ACCESS 在初始化时在自定义类上设置属性时?

iphone - 使用 CGContext 以编程方式创建 PDF - 无法换行 + iPhone

iphone - 计算两个日期之间的差异的问题

iphone - NSPredicate 过滤空格和字母数字

iphone - UITableView : Adaptive cell height

ios - 使用并行作用域中的 block 中的变量

ios - 在 SKScene 的子节点上运行一个简单的操作会导致 iOS 7.1 中的 EXC_BAD_ACCESS

ios - 从 web 服务下载异步数据并存储在核心数据中的最佳方法