我有这样的方法:
- (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会被自动释放,并返回,这时,池排出,使主叫方获得的东西是假的,现在。
我知道我可以显著重新设计的方法,所以我收集了自动释放块以外的所有错误情况,但我想知道是否有在这种情况下,处理错误对象的正确道路。 我不能ALLOC / INIT池块外的推测性NSError,因为域和代码属性是只读(我仍然认为引用将在方法返回时消失)。
如果我改变了方法声明这一点,解决了这个问题:
- (void)processAThing:(id)thing error:(NSError * __strong *)error
但后来我需要在一个非标准的方式调用点大惊小怪左右,这似乎令人震惊,使来电者付出代价,我的内部autoreleasepool。
有什么想法吗? 谢谢。