質問

したがって、私は 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";
}
役に立ちましたか?

解決

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

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

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

_lbl.text = @"A";  

最後の方法は、 @ プロパティをバイパスして iVar に直接アクセスしているため、良くありません。 @property.
あなたの場合、iVar のプロパティを変更しているので害はありませんが、これを行う場合は次のようになります。

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

「セッター」をバイパスすることになるため、大きな問題が発生します。あ strong setter はそのオブジェクトを保持していましたが、現在は誰にも保持されていないため、削除され、不正なポインタが使用され、アプリケーションがクラッシュする可能性があります。

他のヒント

このリンクは、アクセサーを学習するのに非常に役立ちます。 http://www.iphonedevsdk.com/forum/iphone-sdk-tutorials/7295-getters-setters-properties-newbie.html

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top