2012-03-02 6 views
1

Objective-Cでは、.hファイルにインスタンス変数を入れて、それを.mファイルに入れることとの実際の違いは何ですか?最終結果は何か異なっていますか?どのような特定のメカニズムがこれを可能にしますか?どのようにObjective-Cではこれが可能ですが、C++ではそうではありませんか?実装ファイル内のインスタンス変数 - 非公開と保護の比較

.mファイルにインスタンス変数を入れるスタイルを採用すると、これはプライベートインスタンス変数にのみ適しています。保護されたインスタンス変数を常に.hファイルに入れて、サブクラスによって正しく継承できるようにする必要があります。または、何らかの理由で.mファイルの保護されたイールカーズを継承させる方法がありますか?

答えて

2

class extensionsにインスタンス変数を追加することは、Clang/LLVM 2.0以前では不可能でした。 Objective Cコンパイラは、クラスのivarsをヘッダーの定義とクラス拡張から最終的なレイアウトに到着するまで "アセンブル"します。

クラス拡張はObjective-Cの比較的新しい言語機能です。そのため、C++など他の言語での不在は驚くべきことではありません。 C#のような他の言語は、部分クラスで同等の機能を実装することができます。

2番目の部分について正しいです:プライベートインスタンス変数とプロパティのみがクラス拡張で使用するのに適しています。もちろん、publicインスタンス変数は.hファイルになければなりません。

関連する問題