例如,如果我有一个属性index
和一个 ivar _index
,使用起来会不会慢一些self.index
,[self index]
和[self setIndex:]
?
问问题
219 次
1 回答
3
使用访问器会产生开销,至少是方法调用。
也就是说,猜测和证明是不同的东西。开销可能很大,也可能不大。在任何情况下,分析应用程序将显示 CPU 时间花费在哪里以及应该优化什么。我严重怀疑在直接 ivars 上使用访问器会影响任何应用程序,应该避免使用访问器。
原子和复制属性会慢得多,这些选择会产生更大的影响,应该更仔细地考虑。在适当的时候使用它们。
但答案在于分析您的应用程序。
编辑:
访问器有很多好处:封装、客户端、派生类和类本身之间的代码一致性、覆盖、在需要时调试属性访问、只读访问检查……有很多很好的理由来支付少量的性能价格。所有好的理由并不总是足够好。;)
如果访问器成为问题,我会说 Objective-C 类可能不是该工作的合适选择。C++ 类有更多的机会变得更快:非虚拟方法、内联方法、基于堆栈的实例......
于 2012-06-22T10:41:36.027 回答