Objective-C:_variable

n.e*_*ind 1 iphone global-variables objective-c self ios

好吧,以前一定要问这个但是我看起来很生气,一无所获:

我在我的iphone应用程序中有一个简单的数组,我这样定义:

@property (nonatomic, strong) NSArray *pages;
@synthesize pages = _pages;
Run Code Online (Sandbox Code Playgroud)

我在Apples示例代码中看到了这一点,并且认为这是编写self.pages(即_pages替换self.pages)的一个很好的捷径,如下所示:

_pages = [[NSArray alloc] init];
Run Code Online (Sandbox Code Playgroud)

但是Apple再次拥有它(不完全像这样,但看起来好像他们一直随机交换):

self.pages = [NSKeyedUnarchiver unarchiveObjectWithData:contents];
Run Code Online (Sandbox Code Playgroud)

最后:

[_pages release];
Run Code Online (Sandbox Code Playgroud)

这完全让我感到困惑._pages和self.pages之间会有什么区别?

谢谢你的帮助.

小智 5

_pages是对象的ivar的名称.pages是不同的属性名称.
所以,@synthesize pages = _pages;最后说明pages是伊娃的财产_pages.

您将_pages在初始化器和dealloc方法中通过ivar直接访问.在其他任何地方,属性名称用于获取/设置其值.

  • 说得好.请注意[Apple保留名称前缀为下划线](http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CodingGuidelines/Articles/NamingBasics.html#//apple_ref/doc/uid/20001281- 1002931-BBCFHEAB)和非Apple开发人员应避免使用下划线前缀以避免名称冲突.一个解决方案,如果你想区分你的ivars和属性名,就是使用下划线后缀:`foo_`而不是`_foo`. (3认同)
  • @Caleb - 实际上,根据该文章,Apple仅保留用于*方法*名称的下划线. (2认同)

归档时间:

查看次数:

1336 次

最近记录:

13 年,12 月 前