完整性检查。鉴于此:点符号 - 属性/方法
@property (readwrite, nonatomic) NSDate *start;
那么这两行代码是不是相同?
版本1:
self.start.description
版本2:
[self.start description]
即start.description调用start
对象上的description
方法。
完整性检查。鉴于此:点符号 - 属性/方法
@property (readwrite, nonatomic) NSDate *start;
那么这两行代码是不是相同?
版本1:
self.start.description
版本2:
[self.start description]
即start.description调用start
对象上的description
方法。
是的。两种情况下的结果都是相同的。属性(大部分)只是围绕用传统Cocoa风格编写的访问器方法的糖。
我说“主要”,因为有一些微小的内部差异。属性作为元数据添加到Objective C类的运行时描述中。你可以通过一些思考找出已经声明的属性列表。该列表不同于以getter/setter风格命名的方法列表。
是的,他们是相同的,所以是[[self start] description]
基本上是肯定的。
围绕财产有一个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管理,而直接使用实例变量处理内存管理时由您完成。
感谢您的编辑。我的一个愚蠢的错误。 :) – 2013-02-14 11:27:27