0

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


@implementation MyApp

@synthesize name;

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

@end

我猜后者需要更多时间来执行,但我想知道他们建议应用程序开发人员使用什么来保持一致性和良好的编程技术,以及两个分配是否基本上具有相同的时间复杂度。

4

2 回答 2

2

后者实际上会调用属性的 setter 方法name。如果您将设置器覆盖为类似

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

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

在成本方面:我会说设置 ivar 更便宜,但您节省的成本几乎可以忽略不计。我的方法是仅在必要时使用属性,例如在对象的属性上需要 KVO 时。否则我总是使用 ivar。

于 2014-07-09T21:37:32.163 回答
2

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

于 2014-07-09T21:51:17.733 回答