【问题标题】:Performance: dot syntax VS ivar [duplicate]性能:点语法VS ivar [重复]
【发布时间】:2013-04-30 02:45:14
【问题描述】:
@interface Person : NSObject
@property(nonatomic, assign) CGFloat salary;
@end

@implementation Person
- (void)addSalary:(CGFloat)s
{
    _salary += s; **//method 1**
    self.salary += s; **//method 2**
}
@end

我想知道方法 1 和 2 之间哪个更有效? 编译器是否会做一些优化工作以使它们具有相同的性能?

【问题讨论】:

  • 这个问题不是关于 self.ivar 和 ivar 之间的性能。有人建议使用 self.ivar,它在非 ARC 环境中是有意义的。如果采用 ARC,即使是 id 实例,ivar 也不会带来内存泄漏。所以我想知道性能是否相同? “访问器在 Objective-C 中进行了高度优化,并提供了可维护性和灵活性的重要特性。作为一般规则,您应该使用它们的访问器来引用所有属性,甚至是您自己的。”来自 > .

标签: ios objective-c performance


【解决方案1】:

方法 1 将与方法 2 一样快或更快。但出于其他原因,您仍应使用方法 2。见https://stackoverflow.com/a/16012387/1597531

【讨论】:

    【解决方案2】:

    显然,使用_salary 将比self.salary 更快,我怀疑编译器是否可以(在一般情况下)在这里进行任何优化,因为不能保证子类不会实现-salarysetSalary: 本身。然后是键值通知的所有方面。设置 self.salary 将在使用 ivar 时触发键值观察者不会。我的看法是,除非您处于一个非常大且紧密的循环中,否则它不会对您的应用程序产生显着影响,并且使用 self.salary 更强大,因为它允许子类的可能性。我还可以补充一点,objective-c 运行时在方法调度方面非常高效。

    【讨论】:

      猜你喜欢
      • 2012-10-06
      • 1970-01-01
      • 2012-06-23
      • 2023-03-18
      • 2014-02-28
      • 1970-01-01
      • 2014-01-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多