考虑以下启用了ARC的Objective-C代码:
[self.aProperty sendMessage];
if (self.aProperty)
{
[self doSomethingWithProperty:self.aProperty];
}
我在想,将代码重写成以下片段是否会更快(在发布版本中):
MyPropertyClass* myProperty = self.aProperty;
[myProperty sendMessage];
if (myProperty)
{
[self doSomethingWithProperty:myProperty];
}
问题是:苹果LLVM编译器3.0能否优化对属性getter的重复访问?如果属性是非原子的,是否会有任何区别?
如果我必须猜测,我会说写下面的代码更快,因为编译器不能保证在这些行期间self.aProperty不会改变。我是正确的吗?
self
对象内,我通常会直接访问自动创建的实例变量_myProperty
。 - Bastian