人生ずっと勉強

人生ずっと勉強ですね。 https://twitter.com/KiyotakaGoto

インスタンス変数の可視性と指定方法

詳解 Objective-C 2.0 第3版より。

可視性

@private @protected @public
同じクラス内
同じクラスで->を使う
サブクラスから
サブクラスから->を使って
どこからでも

@package については、そのクラスが定義されているフレームワークの内部実装からは
@public のように自由にアクセス可能。
フレームワークを外部から利用する場合は @private と同様アクセス制限される。

指定方法

@interface Hoge : NSObject {
    id hoge; // protected
@public
    BOOL flag;
@private
    id fuga;
    int a;
@protected
    int b;
}
@end

ただ、@private なインスタンス変数については、クラスの実装部にインスタンス変数を定義するほうが
自然に記述できる。変更があってもヘッダファイルを編集する必要もない。