詳解 Objective-C 2.0 第3版より。
可視性
|
@private |
@protected |
@public |
同じクラス内 |
◯ |
◯ |
◯ |
同じクラスで->を使う |
◯ |
◯ |
◯ |
サブクラスから |
☓ |
◯ |
◯ |
サブクラスから->を使って |
☓ |
☓ |
◯ |
どこからでも |
☓ |
☓ |
◯ |
@package については、そのクラスが定義されているフレームワークの内部実装からは
@public のように自由にアクセス可能。
フレームワークを外部から利用する場合は @private と同様アクセス制限される。
指定方法
@interface Hoge : NSObject {
id hoge;
@public
BOOL flag;
@private
id fuga;
int a;
@protected
int b;
}
@end
ただ、@private なインスタンス変数については、クラスの実装部にインスタンス変数を定義するほうが
自然に記述できる。変更があってもヘッダファイルを編集する必要もない。