@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之间哪个更有效? 编译器是否会进行一些优化工作以使它们具有相同的性能?
答案 0 :(得分:3)
显然,使用_salary
会比self.salary
更快,我怀疑编译器可以做(在一般情况下)这里的任何优化,或者仅仅是因为无法保证子类不会实现-salary
或setSalary:
本身。然后是键值通知的所有方面。在使用ivar时,设置self.salary
将触发键值观察器。我的看法是,除非你处于一个非常大且紧凑的循环中,否则它不会在你的应用程序中产生明显的差异,并且使用self.salary
更加健壮,因为它允许子类的可能性。我还可以补充一点,Objective-c运行时在调度方法方面非常有效。
答案 1 :(得分:0)
方法1将比方法2快或快。但出于其他原因,您仍应使用方法2。见https://stackoverflow.com/a/16012387/1597531