0

完整性检查。鉴于这种:

@property (readwrite, nonatomic) NSDate *start;

那么这两行代码不是一样的吗?

版本 1:

self.start.description

版本 2:

[self.start description]

即 start.description 调用对象description上的方法start

4

3 回答 3

2

是的,它们是相同的,也是[[self start] description]

于 2013-02-14T11:04:49.667 回答
2

基本上是的。

在属性周围有一个 setter 和 getter 自动同步。如果您使用 @syncronize 语句,那么您就有机会影响 setter、getter 和属性的命名方式。如果您自动同步属性的名称是_start。getter 名称是 start,setter 名称是 setStart。

所以

something = self.start

实际上调用 getter 和

self.start = something

调用 setter。等价物是:

something = [self start];
[self setStart:something];

如果您想直接访问实例变量,请执行以下操作:

_start = something;
something = _start;

如果您只是使用,@synthesize start;那么等价的将是:

start = something;
something = start;

这很可能令人困惑,但实际上在使用 setter/getterstart时解决了实例变量。self.start当您不使用 ARC 时,这种差异变得非常重要。根据属性参数(例如分配、复制、保留……),自动生成的 getter 和 setter 会为您进行一些内存管理,而当您直接使用实例变量时,内存管理留给您。

于 2013-02-14T11:11:13.647 回答
1

是的。两种情况下的结果都是相同的;属性(大部分)只是以传统 Cocoa 风格编写的访问器方法的糖。

我说“主要”是因为存在一些细微的内部差异。属性作为元数据添加到 Objective C 类的运行时描述中。您可以通过一些反思找出已声明为此类的属性列表。此列表不同于以 getter/setter 样式命名的方法列表。

于 2013-02-14T11:04:12.977 回答