你可以使用一个标点符号或者一方呼吁在客观-C访问对象的属性在目标C

myObject.property = YES;

[myObject setProperty:YES];

是有区别的性能(在访问该财产)?它只是一个优先事项方面的编码的风格?

有帮助吗?

解决方案

点标记的财产的访问在目标C 一个消息发送,只是作为支架符号。就是说,给出这样的:

@interface Foo : NSObject
@property BOOL bar;
@end

Foo *foo = [[Foo alloc] init];
foo.bar = YES;
[foo setBar:YES];

最后两条线将编制完全相同。唯一的变化是,如果一个酒店有一个 getter 和/或 setter 属性规定;然而,它所做的是改变有什么消息发送,而不是是否发送消息:

@interface MyView : NSView
@property(getter=isEmpty) BOOL empty;
@end

if ([someView isEmpty]) { /* ... */ }
if (someView.empty) { /* ... */ }

两者的最后两行将编制相同。

其他提示

检查了 第从可可是我的女朋友.它的要旨,是没有表现的刑罚的使用。

然而,表示法并使它更难以看到发生了什么你变量和你的变量。

唯一的时候你会看到的性能差异是如果你不做标记的财产作为"非原子".然后@合会自动同步加码的周围设置的财产,保持它的线安全的-但是速度较慢设和访问。

因此,大多您可能想要一个定义属性,如:

@酒店(非原子,保留)NSString*myProp;

我找到点符号一般有益的观点来说,你不必考虑编写正确的设置方法,这是不是完全微不足道,甚至为非原子制定者,因为还必须记得释放旧价值正常。使用模板的代码可以帮助你但你总是可以犯错误,这通常重复代码,扰乱了类。

一个模式可以意识到:如果定义的定者自己(而不是让@综合创建),并开始有其他副作用的设定值也许你应该做的装定一个正常的方法而不是调使用该财产的符号。

语义上使用的属性似乎是直接的实际价值的呼叫者以及任何从不同,因此,应当通过发送消息,没有访问一个属性(即使他们是真发送消息)。

因为我已经看到,没有一个显着的表现之间的差异。我可以合理确定,在大多数情况下,它将会编制了相同的代码。

如果你不确定,尝试编写测试的应用程序,每个方法的一万倍或所以,所有的,而时间需要多长时间。这是唯一的方式能够肯定的(虽然它可能有所不同,在不同的结构。)

也读这篇博客上的可可爱:

http://cocoawithlove.com/2008/06/speed-test-nsmanagedobject-objc-20.html

有的作者比较的速度定制的访问点和符号对于十分整洁,并且没有发现任何差异。然而,KVC访问(设定值:forKey:)似乎是有关的两倍,速度慢。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top