0

这是我的代码:

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;
}

痕迹(对不起,不能复制粘贴):

在此处输入图像描述

问题是:发生了什么事?

我需要有关此代码中发生的情况的详细信息。真的很有趣......仪器没有显示任何泄漏,僵尸等。

4

1 回答 1

2

initWithDomain:code:userInfo:是 NSError 的指定初始化器。这意味着不要调用 plain init

只要这样说,你就会遇到同样的崩溃:

NSLog(@"%@", [[NSError alloc] init]);

这个问题与自动引用计数、自动释放、自动释放池、强或任何其他东西无关!只是您正在制作一个错误的 NSError 对象,然后尝试记录它。

于 2013-05-03T17:30:55.717 回答