2013年3月31日日曜日

公開したくないインスタンス変数を持ちたいけれど、どうしたらよいか?

Objective-Cのはなし。

公開したくないインスタンス変数を持たせたいけれど、どうしたらよいか?
手元に実装コードがなくても既存のクラスにメソッドを追加できるのがカテゴリ。でもインスタンス変数は追加できない。では @property で追加したらどう?ってことで試したけれどだめです。

これにはクラス拡張(class extensions)で対応します。クラス拡張はカテゴリのカテゴリ名を無記名にするだけ。括弧内に名前を与えないので匿名カテゴリ(anonymous categories)と呼ぶこともあるそうです。

@interface ClassName () {
    // インスタンス変数の追加も可能
   id _obj;
}
// 宣言プロパティ
@property NSString *string;
// メソッド
- (void)method;
@end

また、クラス拡張でメソッドを追加した場合はクラス本体のソースコードにメソッドの実装をする必要があります。

0 件のコメント:

コメントを投稿