次のクラスとサブクラスがあります。
@interface NSHigh : NSObject
@property (nonatomic, strong) NSArray *array;
@end
@implementation NSHigh
-(NSArray*)array
{
_array = [[NSArray alloc] init];
return _array;
}
@end
@interface NSLow : NSHigh
@end
@implementation NSLow
/* synthesizing makes the assertion FAIL. NO synthesizing makes the assertion PASS */
@synthesize array;
@end
次に、このコードをどこかで実行します。
NSLow *low = [[NSLow alloc] init];
assert(low.array);
したがって、明らかに、サブクラスNSLow
で配列プロパティを合成すると、スーパークラスからのゲッターは呼び出されず、アサーションは失敗します。
合成しないと、スーパークラスのゲッターが呼び出され、アサーションが渡されます。
- なぜこれが起こるのですか?
- 毎回
NSLow
呼び出すことなく、サブクラスの配列インスタンス変数にアクセスするにはどうすればよいですか?self.array