转换为 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
有点东西。
我正在将图书馆转换为 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
有点东西。