使用ivars在类中定义属性值

时间:2014-07-09 21:35:14

标签: objective-c performance properties ivars

访问链接到类方法内的属性的私有ivar比使用其合成的getter / setter方法更有效,或者效率是否相同? ......如:


@implementation MyApp

@synthesize name;

- (void)loadView 
{
    _name = @"Savagewood"; // VS.
    self.name = @"Savagewood";
}

@end

我猜测后者需要更多时间来执行,但我想知道他们建议App开发人员为了一致性和良好的编程技术而使用它们以及这两个任务是否基本上具有相同的时间复杂度。 / p>

2 个答案:

答案 0 :(得分:2)

后者实际上会在属性name上调用setter方法。如果你将setter重写为

之类的东西
- (void)setName:(NSString*)name {
  NSLog(@"New name: %@", name);
  _name = name;
}

您会看到设置ivar不会记录任何内容,但后者会触发日志。

就成本而言:我认为设置ivar更便宜,但是你节省的成本几乎可以忽略不计。我的方法是仅在必要时使用属性,就像在对象的属性上需要KVO时一样。否则我总是使用伊娃。

答案 1 :(得分:2)

通常,最好尽可能使用属性访问器,并限制实例变量直接用于访问器方法,init方法和dealloc(如果您不使用ARC)。相反,避免在init和dealloc中调用访问器,并避免在其自己的访问器方法中使用您正在实现的属性的访问器。