gpt4 book ai didi

iOS - 处理指向已释放变量的异步任务

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

我正在从我的 Controller 中调用一个异步函数,并将对错误变量的引用传递给它,比方说:

NSError *err=nil;
[self myAsyncTask:&err];

如果 Controller 被释放,err 变量将不再存在,因此应用程序会崩溃并出现 BAD_ACCESS 错误(因为该函数试图更改 err 变量的值)。我该如何处理?

最佳答案

请注意,没有任何内置框架方法使用异步调用的引用传递错误报告 - 它们都使用委托(delegate)或 block 来传达错误状态。使用 block ,您的 API 可以编写为像这样使用:

[self doAsyncTaskWithErrorHandler: ^(NSError *error) {
//Handle error
}];

方法签名看起来像

- (void)doAsyncTaskWithErrorHandler:(void (^)(NSError *error))errorHandler;

而在实现中,您过去常常做 *error = someError; 做类似的事情:

NSError *error = ...;
if (errorHandler) {
errorHandler(error);
}

如果我没记错的话,这并不是对象生命周期的真正问题 - 如果在设置错误之前弹出堆栈帧,那么问题中的模式也可能会导致崩溃。

关于iOS - 处理指向已释放变量的异步任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15654303/

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