【发布时间】:2012-09-23 21:15:59
【问题描述】:
我有以下类和子类:
@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 中合成了数组属性,那么来自超类的getter 不会被调用,并且断言失败。
如果我不合成,则调用超类getter,断言通过。
- 为什么会这样?
- 如何在不每次调用
self.array的情况下访问NSLow子类中的数组实例变量?
【问题讨论】:
-
不要在你的类名前加上
NS。这是 Apple 保留的。 -
@JonathanGrynspan 这是一种预防措施,还是苹果也会拒绝该申请?
-
称之为语言要求。
-
对于那些感兴趣的人来说,NS 代表 Cocoa 框架最初来自的 NeXTSTEP:stackoverflow.com/a/473866/159758
标签: objective-c ios inheritance