gpt4 book ai didi

iphone - EXC_BAD_ACCESS 复制或保留 Block 时

转载 作者:太空狗 更新时间:2023-10-30 03:16:34 26 4
gpt4 key购买 nike

据我所知,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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com