我有这样的方法:
- (void)processAThing:(id)thing error:(NSError * __autoreleasing *)error
{
@autoreleasepool {
// Start processing.
// Find some partway through error..
if (error) {
*error = [NSError errorWithDomain...];
return NO;
}
// More processing.
}
}
这被破坏并崩溃了,因为 NSError 是自动释放的,当返回发生时,池被耗尽,所以调用者得到的东西现在是假的。
我知道我可以重新设计该方法,因此我收集了 autorelease 块之外的所有错误案例,但我想了解在这种情况下是否有正确的方法来处理错误对象。我不能在池块之外分配/初始化推测性 NSError,因为域和代码属性是只读的(我仍然认为当方法返回时引用会消失)。
如果我将方法声明更改为此,它可以解决问题:
- (void)processAThing:(id)thing error:(NSError * __strong *)error
但是随后我需要以一种非标准的方式在调用站点上大惊小怪,这让调用者为我的内部自动释放池付出代价似乎是令人震惊的。
有什么想法吗?谢谢。