转换为 ARC 时增加保留计数

Increased retain count when converting to ARC

我正在将图书馆转换为 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内容无关。

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

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

为此,请使用分配工具并打开引用计数跟踪。这将使您能够访问每个保留的回溯,并且您可以找到额外的一个。

更有可能它是对 self 中由 self 中的某物持有的块中的强引用。或者这将是一个强引用的循环; self -> other -> self有点东西。