Objective-C の @property および @synthesize のベスト プラクティス
-
27-10-2019 - |
質問
したがって、私は 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
所属していません StackOverflow