我需要對Objective-C應用程序進行一些維護(將其更新爲使用新的API),並且以前從未使用該語言,但我有點困惑。瞭解Objective-C++ __block修飾符
我有一個Objective-C++類,它實現了API的一個接口,並在一個塊內使用,但是無論何時在塊內訪問,它都會因訪問衝突錯誤(EXC_BAD_ACCESS)而失敗。
進一步的調查顯示沒有任何對象的構造函數被調用。它在包含範圍內聲明,並使用__block修飾符。
要嘗試理解這一點,我做了一個快速應用從無到有,發現同樣的事情發生有:
class Foo
{
public:
Foo() : value(1) { printf("constructor"); }
void addOne() { ++value; printf("value is %d", value); }
private:
int value;
};
void Bar()
{
Foo foo1; // prints "constructor"
__block Foo foo2; // doesn't print anything
foo1.addOne(); //prints "2"
foo2.addOne(); //prints "1"
}
任何人都可以解釋這裏發生了什麼?爲什麼不調用我的默認構造函數,以及如果沒有正確構造對象,如何訪問該對象?
我試圖將這個例子削減到最低限度,試圖弄清楚發生了什麼 - 真正的東西正在塊中使用。我已經看過那篇文章,但這並沒有真正解釋它。我可以看到變量生活在一個特殊的地方,並以奇怪的方式處理,但當然它仍然需要構建? –