完整性检查。鉴于此:
@property (readwrite, nonatomic) NSDate *start;
那么这两行代码不一样吗?
版本1:
self.start.description
第2版:
[self.start description]
即。 start.description调用description
对象上的start
方法。
答案 0 :(得分:2)
是的,它们是相同的,[[self start] description]
答案 1 :(得分:2)
基本上是的。
在酒店周围有一个setter和getter autosynchoronizsed。如果您使用@syncronize语句,那么您有机会影响setter,getter和property的命名方式。如果您自动同步该属性的名称是_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;
这可能会令人困惑,但start
实际上解决了实例变量,而self.start
使用了setter / getter。当您不使用ARC时,这种差异非常重要。根据属性参数(例如,赋值,复制,保留......),自动生成的getter和setter会为您执行一些内存管理,而在您直接使用实例变量时,内存管理由您完成。
答案 2 :(得分:1)
是。结果在两种情况下都是相同的;属性(大多数)只是围绕以传统Cocoa风格编写的访问方法的糖。
我说“大多数”因为内部存在一些细微差别。属性作为元数据添加到Objective C类的运行时描述中。您可以通过一些反思找出已声明为此类的属性列表。此列表与以getter / setter样式命名的方法列表不同。