【发布时间】:2015-10-06 18:23:54
【问题描述】:
我更喜欢写“self.foo”而不是“_foo”,主要是出于风格原因。理论上 self.foo 表示函数调用,而 _foo 不是。我认为这没问题,因为它对大多数代码来说不太重要。
我的问题是:编译器是否将其优化为相同的东西?由于方法混乱,也许它不能?有人有什么见解吗?
【问题讨论】:
标签: objective-c properties compiler-optimization ivar
我更喜欢写“self.foo”而不是“_foo”,主要是出于风格原因。理论上 self.foo 表示函数调用,而 _foo 不是。我认为这没问题,因为它对大多数代码来说不太重要。
我的问题是:编译器是否将其优化为相同的东西?由于方法混乱,也许它不能?有人有什么见解吗?
【问题讨论】:
标签: objective-c properties compiler-optimization ivar
不,编译器不会将其优化为仅访问实例变量。它无法优化它,因为该类可能有一个覆盖 getter 方法的子类。 (注意子类可以在运行时创建!)
但是,除非您已分析代码并确定它是瓶颈,否则您不必担心消息发送开销。
【讨论】:
atomic,它也会为此添加代码。回到 MRC 时代,这些方法添加了正确内存管理的代码。所以是的,与简单访问 ivar 相比,开销要多得多。但正如 Rob 所说,除非您由于使用属性的方法而不是直接 ivar 访问而存在已证明的瓶颈,否则不要担心任何问题。
willAccessValueForKey: and didAccessValueForKey:..