NSError *错误; vs NSError * error = nil;

时间:2012-02-25 14:28:30

标签: ios nserror

我开发了一个具有以下内容的ios应用程序:

NSError *error; 

而不是:

NSError *error = nil;  

当我在模拟器中进行调试并在连接时在设备上进行调试时,它工作正常。在我将其归档并将其发送到TestFlight以进行测试的那一刻,我开始在崩溃日志中出现未知信号错误。

为什么会这样?

2 个答案:

答案 0 :(得分:6)

这是因为你有一个未初始化的指针。只要你幸运,它就不会崩溃,但使用这样的指针是undefined behavior

答案 1 :(得分:3)

为了澄清dasblinkenlights的回答,这是声明一个变量:

NSError *error; 

...这是声明并分配变量

NSError *error = nil;  

当你以第一种方式使用它并尝试访问它而没有将其设置为某种东西时,它所指向的值被称为“垃圾”它是指向其他一些内存堆栈的指针,并且几乎将访问它总是让你的应用程序崩溃。因此,最好在上面或之后不久为变量赋值。