スーパークラスではMyClass
:
@interface MyClass : NSObject
@property (nonatomic, strong, readonly) NSString *pString;
@end
@implementation MyClass
@synthesize pString = _pString;
@end
サブクラスではMySubclass
@interface MySubclass : MyClass
@end
@implementation MySubclass
- (id)init {
if (self = [super init]) {
_pString = @"Some string";
}
return self;
}
問題は、コンパイラが_pString
が のメンバーであると認識しないことですMySubclass
が、 で にアクセスする際には問題はありませんMyClass
。
何が足りないのでしょうか?
ベストアンサー1
_pString
生成されるインスタンス変数@synthesize
はプライベートにMyClass
。あなたはそれをする必要があります保護されたMySubclass
アクセスできるようにするためです。
次のように、のセクション_pString
にの ivar 宣言を追加します。@protected
MyClass
@interface MyClass : NSObject {
@protected
NSString *_pString;
}
@property (nonatomic, strong, readonly) NSString *pString;
@end
ここで、通常どおりアクセサーを合成すると、変数がサブクラスからアクセスできるようになります。