为什么我不能在超类中访问设置w /属性的实例变量?

时间:2012-09-09 18:44:47

标签: objective-c

我有以下对象:

@interface Foo : NSObject
@property (readonly, strong) NSString *someVar;
@end

@implemtation Foo
@sythensize someVar = _someVar;
@end

然后我将其子类化:

@interface Bar : Foo
-(id)initWithString:(NSString *)string;
@end

@implementation Bar
-(id)initWithString:(NSString *)string {
  _someVar = string;
}
@end

但我得到了“使用未声明的标识符_someVar”.....为什么Bar不知道foo的实例变量_someVar?

1 个答案:

答案 0 :(得分:1)

始终使用getter / setter。低水平/直接访问仅在寻求第二十亿次性能改进时才适用,在这种情况下,我会质疑你是否应该完全抛弃Obj-C并切换到只有C.

我是这样做的:

@synthesize someVar;

-(id)initWithString:(NSString *)string {
  self.someVar = string;
}

或者,如果我有充分的理由不使用访问器方法,那么。我根本不使用@synthesize。

此外,在最新版本的Xcode中,您可以跳过@synthesize行。