在我的头文件中,我有:
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的选项
我应该使用哪一个?
答案 0 :(得分:3)
使用此行
@synthesize userNameOrEmail=_userNameOrEmail
您正在使用支持iVar _userNameOrEmail声明属性userNameOrEmail。你做 NOT 需要做另外这样的声明:
IBOutlet UITextField * _userNameOrEmail;
IBOutlet UITextField * _password;
您现在可以通过_userNameOrEmail =
或通过self.userNameOrEmail =
访问iVar支持。我建议您使用该属性,因为您可以根据需要通过其他类访问该变量,它将为您管理内存,您可以使用点符号....
答案 1 :(得分:0)
目前建议的Objective-C 2.0实践是使用与ivar相同的名称作为属性。您可以选择在@property
声明中指定不同的ivar,但默认情况下,属性的合成访问器将访问与该属性同名的ivar,这表明它们是您希望遵循的模式。 / p>
在2012-02-16修订版之后,Apple在“Coding Guidelines for Cocoa”中明确说明了以_为前缀的实例变量的命名约定,原因如此。
确保实例变量的名称简明地描述了存储的属性。通常,您不应该直接访问实例变量,而应该使用访问器方法(您可以直接在init和dealloc方法中访问实例变量)。为了帮助发出这个信号,请使用下划线(_)ex -
为实例变量名称加前缀