0

私のヘッダーファイルには次のものがあります:

IBOutlet UITextField * _userNameOrEmail; 
IBOutlet UITextField * _password; 



@property (retain) IBOutlet UITextField * userNameOrEmail;
@property (retain) IBOutlet UITextField * password;

私の実装では、次のものがあります。

@synthesize userNameOrEmail=_userNameOrEmail, password=_password;

nib ファイルに入ると、UITextField をドラッグでき、_userNameOrEmail と userNameOrEmail の両方のオプションが表示されます

どちらを使用すればよいですか?

4

2 に答える 2

3

この行で

@synthesize userNameOrEmail=_userNameOrEmail

バッキング iVar _userNameOrEmail を使用してプロパティ userNameOrEmail を宣言しています。次のような別の宣言を行う必要はありません。

IBOutlet UITextField * _userNameOrEmail; 
IBOutlet UITextField * _password; 

を介してバッキング iVar に、_userNameOrEmail =または を介し​​てプロパティにアクセスできるようになりましself.userNameOrEmail =た。必要に応じて他のクラスを介して変数にアクセスでき、メモリを管理し、ドット表記を使用できるため、プロパティを使用することをお勧めします....

于 2012-06-30T18:43:49.787 に答える
0

現在推奨されている Objective-C 2.0 のプラクティスは、ivar にプロパティと同じ名前を使用することです。必要に応じて、宣言で別の ivar を割り当てることができますが、@property既定では、プロパティの合成アクセサーがプロパティと同じ名前の ivar にアクセスするという事実は、それが従うべきパターンであることを示しています。

_ で始まるインスタンス変数の命名規則は、2012 年 2 月16 日の改訂後、 Apple によって「 Cocoa のコーディング ガイドライン」で明確に示され、その理由が示されました。

インスタンス変数の名前が、格納されている属性を簡潔に表していることを確認してください。通常、インスタンス変数に直接アクセスするべきではなく、代わりにアクセサ メソッドを使用する必要があります (init メソッドと dealloc メソッドでインスタンス変数に直接アクセスします)。これを知らせるために、インスタンス変数名の前にアンダースコア (_) を付けます ex -

于 2012-06-30T18:42:00.337 に答える