【问题标题】:Is accessing a property thru "self." at all slower than directly accessing the ivar?正在通过“自我”访问属性。比直接访问 ivar 慢吗?
【发布时间】:2012-06-24 15:11:56
【问题描述】:

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

【问题讨论】:

  • 是的,相差几个数量级。
  • 不要忽视正在发生的事情的基本速度。除非您处于紧密循环中,否则任何差异都可能完全无关紧要。

标签: objective-c properties instance-variables


【解决方案1】:

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

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

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

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

编辑:

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

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

【讨论】:

  • +1 用于分析。与最轻微的绘画相比,这种差异可能微不足道。
猜你喜欢
  • 2011-09-27
  • 1970-01-01
  • 2014-09-27
  • 2010-12-17
  • 2012-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-01
相关资源
最近更新 更多