【问题标题】:Need some explanation on property [duplicate]需要对属性进行一些解释[重复]
【发布时间】:2012-07-08 21:58:06
【问题描述】:

可能重复:
How does an underscore in front of a variable in a cocoa objective-c class work?

我是 ios 应用程序开发的初学者。我查看了很多教程,我遇到了以下行

.h 文件包含:

@property (strong) ScaryBugData *data;

.m 包含:

@synthesize data = _data; 

但我没有理解data = _data 的含义。 为什么需要这样做或这意味着什么。

参考:http://www.raywenderlich.com/1797/how-to-create-a-simple-iphone-app-tutorial-part-1

【问题讨论】:

标签: iphone objective-c ios properties


【解决方案1】:

_data 是自动为您创建的实例变量的名称。
data 是具有 getter 和 setter 的属性的名称。

如果您不指定自定义 ivar 名称,它将默认为属性名称。

在这种情况下,您可以直接使用_data = [ScaryBugData data] 设置ivar,也可以使用self.data = [ScaryBugData data] 使用setter。获取也是一样。

合成的 setter 将确保旧值被正确释放,新值被正确保留,并在后台处理一些其他内容。

【讨论】:

    【解决方案2】:

    如果您访问 self.data,您将调用 getter/setter 方法。如果您分配 _data,您将绕过 setter 方法并直接访问变量。这可能很有用,例如,如果您的 setter 或 getter 正在执行您在这种特定情况下可能不想做的其他事情。

    在 Java 世界中,这相当于调用 this.thing=xyz vs. setThing(xyz)

    以 Core Data 模板为例,您可以看到 managedObjectContext 访问器是如何做额外工作的,而不仅仅是获取变量。

    【讨论】:

      猜你喜欢
      • 2015-02-17
      • 2021-11-13
      • 1970-01-01
      • 2016-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-24
      • 1970-01-01
      相关资源
      最近更新 更多