gpt4 book ai didi

objective-c - 在 block 中使用弱 obj 时崩溃

转载 作者:行者123 更新时间:2023-12-05 00:39:30 28 4
gpt4 key购买 nike

我的代码是这样的:

Member *member = [Member new];
__weak __typeof(self) weakSelf = self
member.gotoPageBlock = ^(NSString *url) {
__strong __typeof(weakSelf) self = weakSelf
[self goToPageWithURL:[NSURL URLWithString:url]];
};

它很少会崩溃,这个崩溃的顶部堆栈是这样的:

Exception Type:  SIGSEGV
Exception Codes: SEGV_ACCERR at 0x365722298
Triggered by Thread: 0
Thread 0 Crashed:
0 libobjc.A.dylib 0x0000000182794bb4 _objc_loadWeakRetained :156 (in libobjc.A.dylib)

执行 block 时发生崩溃。
有谁知道发生了什么?

最佳答案

不需要再次创建 strong self ,因此删除此行 __strong __typeof(weakSelf) self = weakSelf 然后应该可以正常工作

使用这个

Member *member = [Member new];
__weak __typeof(self) weakSelf = self
member.gotoPageBlock = ^(NSString *url) {
//the difference is here
[weakSelf goToPageWithURL:[NSURL URLWithString:url]];
};

检查 https://sectionfive.net/blog/2014/11/24/arc-exploration-and-pitfalls/在执行时失去所有权部分了解更多信息

关于objective-c - 在 block 中使用弱 obj 时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50324010/

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