0

可能重复:
可可objective-c 类中变量前面的下划线如何工作?

我是 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

4

2 回答 2

2

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

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

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

合成的 setter 将确保旧值被正确释放,新值被正确保留,并在幕后处理更多内容。

于 2012-07-09T13:39:25.433 回答
1

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

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

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

于 2012-07-09T13:40:21.663 回答