以下のように、Protected.hで宣言しているプロパティがある場合、
// AbstractViewController_Protected.h
@property (nonatomic) NSObject *obj;
このクラスのサブクラスのインスタンスからこのプロパティにアクセスするとエラーになる。
// ConcreteViewController.m self.obj = @"test"; // unrecognized selector sent to instance
よく考えたらAbstractViewController_Protected.hはカテゴリでメソッドを定義するのでインスタンス変数は作れない。。
protectedなプロパティでインスタンス変数を作りたい場合は、無名カテゴリにもプロパティを宣言しないといけない。
// AbstractViewController.m @interface AbstractViewController () @property (nonatomic, readwrite) NSObject *obj; @end
これはぱっと見なんで無名カテゴリにプロパティ宣言が必要なのかわからないからイヤだなぁ。