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