@synthesize username = _username;
//Method1
- (void) viewDidLoad
{
self.username = @"admin";
}
//Method2
- (void) viewDidLoad
{
_username = @"admin"
}
两者都有效,有什么区别?
我可以使用_username吗?当我使用self.username时,它会@synthesize用户名;
self.username 是一个方法吗?_username只是一个变量?
我用几种方法编写_username。它也可以在视图中工作。 self.username 是否比 _username 快?
self.username
将调用username
的 setter,这就是断点跳转到synthesize
语句的原因。
当您_variable时,可以使用_variable访问该属性。 在您的情况下:
self.username
将值存储到 ivar_username
_username = @"admin";
还将值存储到 ivar_username
。意味着两者都保存到同一个 ivar_username
.
示例 4-2 使用 @synthesize 您可以使用 property=ivar 形式来指示特定的 实例变量应用于属性,例如:
@synthesize名字,姓氏,年龄=岁;
这指定了名字、姓氏和 年龄应综合,财产年龄由 实例变量年份。合成的其他方面 方法由可选属性确定
请参考 http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/objectivec/chapters/ocproperties.html
我建议您浏览苹果文档 - 声明的属性。self.username
等效于其他语言中的 getter 和 setter 方法。只是关于这个的几件事。在 ARC 之前,它也有助于确保遵循内存管理部分(处理保留、释放、参数副本)。_username
主要用于init
等方法,不建议在init
和dealloc
中使用self.param
。
self.username 与 _username 之间的区别。
self.username 使用访问器(setter 和 getters)。他们调用该方法,并在该方法中访问 ivar。
_username直接使用 ivar。没有方法调用,因此这可能会节省一些开销。
self.username 使您的类符合 KVO 标准,而_username绕过它。