gpt4 book ai didi

objective-c - 从内部 block 中调用 block

转载 作者:行者123 更新时间:2023-12-03 16:29:16 24 4
gpt4 key购买 nike

我有一个 Cocoa/Objective-C 类,其方法如下所示:

- (void)doWork:(void (^)(void))handler
{
[self->someObject doActualWork:kWorkID handler:^(Result *result) {
if (handler)
handler();
}];
}

但是,当调用内部 block 时,handler 已被释放,并且程序在调用时崩溃。据我了解,这是因为该 block 存储在堆栈中,因此在 doWork: 完成后很快就被删除了。我正在使用ARC。我应该怎么做才能解决这个问题?

最佳答案

首先,iVar 访问的 self-> 通常是一种奇怪且不鼓励的模式。

您是否在将它们存储起来以供以后使用之前复制了这些 block ?如果这是异步代码,那么您的 actualWork:handler: 方法应该在将 block 排入队列之前复制该 block 。

即使在 ARC 下;虽然 ARC 自动处理方法中 block 的返回,但它无法自动将 block 作为参数处理,并且您仍然需要复制它们。

如果这是纯粹的同步代码,那么就会出现其他问题。您需要提供更多线索。

关于objective-c - 从内部 block 中调用 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8704069/

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