点符号 - 属性/方法

时间:2013-02-14 11:02:34

标签: objective-c

完整性检查。鉴于此:

@property (readwrite, nonatomic) NSDate *start;

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

版本1:

self.start.description

第2版:

[self.start description]

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

3 个答案:

答案 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样式命名的方法列表不同。