0

次のオブジェクトがあります。

@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 を認識しないのですか?

4

1 に答える 1

1

常にゲッター/セッターを使用してください。低レベル/直接アクセスは、10 億分の 1 秒のパフォーマンスの向上を求める場合にのみ適切です。その場合、Obj-C を完全に捨てて、C だけに切り替える必要があるかどうか疑問に思います。

これが私がそれを行う方法です:

@synthesize someVar;

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

または、アクセサ メソッドを使用しない正当な理由がある場合は、. @synthesize はまったく使用しません。

また、Xcode の最新バージョンでは、@synthesize行をスキップできます。

于 2012-09-09T18:58:43.030 に答える