Objective-C:という抽象化の漏洩
-
23-09-2019 - |
質問
私は集まるObjective-C Iの旨を申告しなければなインスタンス変数の一環として、インターフェースのクラスの場合でもこれらの変数は実施内容やプライベートアクセス。
の"自覚"C,Iを付与することも可能で、変動するcファイルでは見えないその日の作成ユニットです。Iを付与することも可能ですの対応です。hファイルとしてもリンクを作成ユニットで可変となります。
かりがある場合は同等の選択的合っていれば確かにする宣言"を発することを決議ivar。h私のクラスです。
Ari.
解決
他のヒント
インスタンス変数は、伝統的に、クラスのサイズを決定するために必要されています。それは、常に直接アイバーズにアクセスするために貧しい人々の練習をされている、それはポイントではありません。現代のランタイムでは、これはあまり必要であるが、いずれにせよ、それはあなたが@protected
または@private
、右のようにそれらを宣言しているので、不可能である必要があり、クライアントがクラスのアイバーズに依存している場合を除き抽象リークは、ないですか?
アクセスを制限に利用できます @private
または @protected
キーワード:
@interface Foo : NSObject {
@private
int barPrivate;
@protected
int barProtected;
@public
int barPublic;
}
@end
編集: 傷もがっぽい大人な雰囲気があります。
@protected
とすることができ、常にアクセスアイバーズ@private
と@protected
は、他のクラスがそれらにアクセスすることができないという保証はありませんが)アイバーズは、デフォルトではgetValue:forKey:
です。 「選択肢は」(あなただけに直接アクセスしませアイバーズに大会を下記のすべてのクラスに依存する必要が)プロパティとしてアイバーズを公開するかどうかではない - あなたはどのような場合でも、直接他のクラスから直接アクセス決してアイバーズをする必要があります。
には、Objective-Cのランタイム、あなたはそれらが実行時に合成されたが、残念ながらiPhoneシミュレーターで作業しないことをすることができますので、今のところそう、すべてでアイバーズを宣言する必要はありません、それだけに最高の新機能.hファイル内のすべてのアイバーズを宣言します。