性能:点语法VS ivar

时间:2013-05-06 10:50:33

标签: ios objective-c performance

@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之间哪个更有效? 编译器是否会进行一些优化工作以使它们具有相同的性能?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

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