2013-02-14 63 views
0

完整性检查。鉴于此:点符号 - 属性/方法

@property (readwrite, nonatomic) NSDate *start; 

那么这两行代码是不是相同?

版本1:

self.start.description 

版本2:

[self.start description] 

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

回答

1

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

我说“主要”,因为有一些微小的内部差异。属性作为元数据添加到Objective C类的运行时描述中。你可以通过一些思考找出已经声明的属性列表。该列表不同于以getter/setter风格命名的方法列表。

2

是的,他们是相同的,所以是[[self start] description]

2

基本上是肯定的。

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

所以

something = self.start 

实际调用getter和

self.start = something 

调用的二传手。 等价物:

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

如果你想直接访问实例变量,然后通过这样做:

_start = something; 
something = _start; 

在您刚刚使用@synthesize start;事件,则相当于将是:

start = something; 
something = start; 

这可能会令人困惑,但start实际上是对实例变量的地址,而self.start使用二传手/吸气。当你不ARC时,这种差异非常重要。根据属性参数(例如分配,复制,保留...)自动生成的getter和setter为您执行一些memeory管理,而直接使用实例变量处理内存管理时由您完成。

+0

感谢您的编辑。我的一个愚蠢的错误。 :) – 2013-02-14 11:27:27