0
这里是我的代码:为什么我的应用程序崩溃使用__autoreleasing + __strong?
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;
}
痕迹(抱歉,不能复制粘贴):
的问题是:这是怎么回事?
我需要详细了解此代码中正在进行的操作。真的很有趣... 仪器不显示任何泄漏,僵尸等
你能解释一下,那里有什么? – AndrewShmig 2013-05-03 17:34:41
是的,我可以! :) NSLog崩溃了你。你正在创建一个无效的NSError对象。当你尝试记录它时,NSLog向你的NSError对象发送'description'消息。但它是无效的,所以它没有“描述”。 – matt 2013-05-03 18:47:12
(好吧,它有一个'description'方法,但是该方法调用'localizedDescription',这就是问题的根源。) – matt 2013-05-03 18:57:21