这是我的代码:
void autoreleasingReturn (NSError * __autoreleasing *error)
{
// --- Crashing
*error = [[NSError alloc] init];
// --- Not crashing
// *error = [NSError errorWithDomain:@"hello"
// code:-1
// userInfo:@{}];
}
int main(int argc, const char * argv[])
{
@autoreleasepool {
NSError __strong *error = nil;
autoreleasingReturn(&error);
NSLog(@"error: %@", error); // crash!
}
return 0;
}
跟踪(抱歉,无法复制粘贴):
问题是:发生了什么?
我需要详细了解此代码中发生的事情。非常有意思... 仪器不显示任何泄漏,僵尸等。
答案 0 :(得分:2)
initWithDomain:code:userInfo:
是NSError的指定初始化程序。这意味着不要调用普通init
。
只要这样说就可以得到同样的崩溃:
NSLog(@"%@", [[NSError alloc] init]);
问题与自动引用计数,自动释放,自动释放池,强大或任何其他东西无关!只是你正在制作一个糟糕的NSError对象,然后尝试记录它。