转换为ARC时保留计数增加

时间:2015-12-10 10:33:50

标签: objective-c macos automatic-ref-counting

我正在将图书馆转换为ARC atm。我有一个NSViewController后代,以通常的方式加载xib:

- (instancetype)initWithModule: ...
{
  self = [super initWithNibName: @"mynib" bundle: [NSBundle bundleForClass: [self class]]];
  if (self != nil) {
    [self view];
  }

  return self;
}

当我在没有ARC的情况下执行此操作时,在调用视图之后该控制器的保留计数为2(如您所知,它会加载笔尖并连接插座)。但是,如果启用ARC,则会将保留计数增加到3,这会导致此控制器泄漏,因为计数永远不会返回到0。

我更改了所有出口以使用弱引用(NSTextView实例除外,但它们从不作为顶级对象出现)。但这似乎没有帮助。

更新:这似乎会影响我拥有的每个视图控制器,至少我检查过的所有视图控制器。所以这似乎是一个基本问题,与xib内容无关。

如何找出导致额外保留的原因?

1 个答案:

答案 0 :(得分:2)

绝对保留计数毫无意义。您需要找到调用retain的所有位置(或者在ARC的情况下通过暗示调用)。

为此,请使用“分配”工具并启用引用计数跟踪。这将使您可以访问每个保留的回溯,您可以找到额外的保留。

更有可能的是,self中某些内容中self的强引用。或者它将是一个强有力的参考周期; self -> other -> self有点儿。