2012-03-02 94 views
1

在Objective-C中,將實例變量放入.h文件與將其放入.m文件之間的實際區別是什麼?最終結果有何不同?什麼特定的機制允許這個?在Objective-C中如何實現這一點,而不是在C++中?實現文件中的實例變量 - 私有與受保護

如果我採用將實例變量放在.m文件中的樣式,這隻適用於私有實例變量,對吧?我應該總是把我的受保護的實例變量放在.h文件中,以便它們可以被子類正確地繼承,對嗎?或者有沒有辦法讓.m文件被保護的ivars以某種方式被繼承?

回答

2

在Clang/LLVM 2.0之前不可能在class extensions中添加其他實例變量。 Objective C編譯器從頭文件和類擴展中的定義中「裝配」類的ivars,以達到最終的佈局。

類擴展是Objective-C的一個相對較新的語言特性,所以它在其他語言中的缺失,例如C++,應該不會讓人吃驚。而其他語言(如C#)可能會使用部分類實現可比較的功能。

對於第二部分,您是正確的:只有私有實例變量和屬性適用於類擴展;保護,當然公共實例變量應該在.h文件中。