privateなpropertyはclass extensionを使えば良いですが、protected、即ちsubclassからもアクセスできるpropertyが欲しい場合どうするか。
Step 1: protectedなインスタンス変数をヘッダーで宣言
// SuperClass.h
@interface SuperClass: NSObject
{
NSObject *_variable;
}
@end
superclassのヘッダーで、protectedなインスタンス変数を宣言します。
Step 2: SuperClassにもう一つヘッダーファイルを宣言
//SuperClass_protected.h
#import "SuperClass.h"
@interface SuperClass ()
@property (nonatomic , readonly) NSObject *variable;
@end
SuperClass.hをimportし、SuperClassのclass extensionを使って、先ほど宣言したインスタンス変数に対応するpropertyをreadonlyを指定して、宣言します。
Step 3: 実装ファイル(.m)でインスタンス変数とpropertyをsynthesize
// SuperClass.m
#import "SuperClass_protected.h"
@implementation SuperClass
@synthesize ivar = _ivar;
@end