2

例如,如果我有一个属性index和一个 ivar _index,使用起来会不会慢一些self.index,[self index][self setIndex:]?

4

1 回答 1

3

使用访问器会产生开销,至少是方法调用。

也就是说,猜测和证明是不同的东西。开销可能很大,也可能不大。在任何情况下,分析应用程序将显示 CPU 时间花费在哪里以及应该优化什么。我严重怀疑在直接 ivars 上使用访问器会影响任何应用程序,应该避免使用访问器。

原子和复制属性会慢得多,这些选择会产生更大的影响,应该更仔细地考虑。在适当的时候使用它们。

但答案在于分析您的应用程序。

编辑:

访问器有很多好处:封装、客户端、派生类和类本身之间的代码一致性、覆盖、在需要时调试属性访问、只读访问检查……有很多很好的理由来支付少量的性能价格。所有好的理由并不总是足够好。;)

如果访问器成为问题,我会说 Objective-C 类可能不是该工作的合适选择。C++ 类有更多的机会变得更快:非虚拟方法、内联方法、基于堆栈的实例......

于 2012-06-22T10:41:36.027 回答