3

サンプルコードの多くの場所で、@synthesize変数の2つの異なる方法を見てきました。たとえば、ここでは1つのサンプルボタンを使用しています。@property(strong、nonatomic)IBOutlet UIButton * loginButton;

1.@synthesizelogonButton = _logonButton;

2.@synthesizelogonButton;

この2つの方法のうち、どちらが推奨されますか?

4

2 に答える 2

7

短い答え

最初の方法が推奨されます。

長い答え

最初の例は、プロパティに対して生成されたivarは、プロパティ()と同じ名前を持つデフォルトの生成されたivarの代わりに使用するlogonButton必要があることを宣言しています。_logonButtonlogonButton

これの目的は、メモリの問題を防ぐのに役立つことです。誤ってオブジェクトをプロパティではなくivarに割り当てた場合、そのオブジェクトが保持されず、アプリケーションがクラッシュする可能性があります。

@synthesize logonButton;

-(void)doSomething {
    // Because we use 'self.logonButton', the object is retained.
    self.logonButton = [UIButton buttonWithType:UIButtonTypeCustom];


    // Here, we don't use 'self.logonButton', and we are using a convenience
    // constructor 'buttonWithType:' instead of alloc/init, so it is not retained.
    // Attempting to use this variable in the future will almost invariably lead 
    // to a crash.
    logonButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
}
于 2012-06-13T14:26:00.493 に答える
2
  1. プロパティに対して自動的に生成されたset/getメソッドが、異なる名前(_logonButton)のivarを使用していることを意味します。

    -(void)setLogonButton:(UIButton)btn {
    _logonButton = [btn retain]; // or whatever the current implementation is
    }

  2. プロパティに対して自動的に生成されたset/getメソッドが、同じ名前のlogonButtonを持つivarを使用していることを意味します。

    -(void)setLogonButton:(UIButton)btn {
    logonButton = [btn retain]; // or whatever the current implementation is
    }

于 2012-06-13T14:34:55.430 に答える