0

ですから、私はObjc-Cを初めて使用し、変数の使用@propertyと使用について学習しているところ@synthesizeです。次に、変数にアクセスする方法を考えていました。[self var]またはまたは何を介してアクセスする必要がありますself.varか?これは私の質問をコードで示しています:

@property (nonatomic, strong) UILabel *lbl;
...
@synthesize lbl = _lbl;

-(void) doStuff
{
   // How should I acces label?
   _lbl.text = @"A";
   [self lbl].text = @"B";
   self.lbl.text = @"C";
}
4

1 に答える 1

0

ここに違いはありません:

UILabel * l = [self lbl];  // ==   UILablel *l = self.lbl;
[self setLbl:l];          //  ==   self.lbl = l;

しかし、ここのサンプルには違いがあります:

_lbl.text = @"A";  

@propertyをバイパスしてiVarに直接アクセスしているため、最後の1つは適切ではありません。これは、として宣言している場合は意味がないことがよくあります@property
あなたの場合、iVarのプロパティを変更しているので、害はありませんが、これを行う場合:

_lbl = [[[UILabel alloc] initWithFrame:aRect] autorelease];

「セッター」をバイパスすることになるので、それはあなたに大きな問題を引き起こすでしょう。セッターはそのオブジェクトを保持していましたstrongが、今では誰も保持していません。オブジェクトが消えて、ポインターが不良になり、アプリケーションがクラッシュする可能性があります。

于 2012-01-13T03:33:56.280 に答える