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

4

2 回答 2

3

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

于 2013-05-06T10:56:28.103 回答
0

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

于 2013-05-06T10:57:52.473 回答