-4
@synthesize username = _username;
//Method1
    - (void) viewDidLoad
{
self.username = @"admin";
}

//Method2
- (void) viewDidLoad
{
   _username = @"admin"
}

两者都有效,有什么区别?
我可以使用 _username 吗?当我使用 self.username 时,它​​将转到 @synthesize 用户名;
self.username 是一个方法吗?<br/> _username 只是一个变量?
我用几种方法写了_username。它也可以在视图中工作。self.username 是否比 _username 快?

4

3 回答 3

1

self.username调用设置器,username这就是断点跳转到synthesize语句的原因。

当您使用 _variable 时,可以使用 _variable 访问该属性。在你的情况下:

self.username将值存储到 ivar_username并且_username = @"admin";还将值存储到_usernameivar。表示两者都保存到相同的 ivar _username

清单 4-2 使用 @synthesize 您可以使用 property=ivar 的形式来指示应该为属性使用特定的实例变量,例如:

@synthesize firstName, lastName, age=yearsOld;

这指定了 firstName、lastName 和 age 的访问器方法应该被合成,并且属性 age 由实例变量 yearsOld 表示。合成方法的其他方面由可选属性决定

请参考http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/objectivec/chapters/ocproperties.html

于 2012-11-28T08:47:29.913 回答
0

我建议您阅读苹果文档 - Declared Propertiesself.username相当于其他语言的getter和setter方法。只是关于这一点的几件事。在 ARC 之前,它用于帮助确保遵循内存管理部分(处理保留、释放、参数的副本)。_username多用于init不建议使用self.paramininit和等方法时dealloc

于 2012-11-28T08:39:55.683 回答
0

self.username 与 _username 之间的区别。

self.username 使用访问器(setter 和 getter)。他们调用方法,并在方法中访问 ivar。

_username 直接使用 ivar。没有方法调用,所以这可能会节省一些开销。

self.username 使您的类符合 KVO,而 _username 绕过它。

于 2012-11-28T09:31:55.413 回答