由于ARC,Xcode 4.6崩溃了吗?

时间:2013-02-03 12:25:41

标签: ios xcode objective-c++

Xcode 4.6中令人难以置信。

如果我将变量初始化为某个东西,它会释放内存。但是如果这个变量有一个随机值呢?

class X 
{

private:

    NSThread* thr;

public:

    X();
}; 
X :: X()
    {
        thr = 0; // BOOM !!!?
    }
X* x = new X(); // Constructor crashes.

但是如果构造函数是内联的,那就不是!

1 个答案:

答案 0 :(得分:3)

在C ++构造函数中,您需要使用initialization list来设置成员变量的初始值。

X :: X() : thr(nil) 
{
}

否则,就像您看到的那样,thr最初会有垃圾值,当ARC尝试将-release发送到该值时,您可能会崩溃。

正如ARC documentation所说:

  

ARC无法区分用于“初始化”动态内存的赋值运算符和可能用于替换值的赋值运算符。