Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 转换为圆弧时增加了保留计数_Objective C_Macos_Automatic Ref Counting - Fatal编程技术网

Objective c 转换为圆弧时增加了保留计数

Objective c 转换为圆弧时增加了保留计数,objective-c,macos,automatic-ref-counting,Objective C,Macos,Automatic Ref Counting,我正在把图书馆换成自动取款机。其中我有一个NSViewController子代,它以通常的方式加载xib: - (instancetype)initWithModule: ... { self = [super initWithNibName: @"mynib" bundle: [NSBundle bundleForClass: [self class]]]; if (self != nil) { [self view]; } return self; } 当我在没有

我正在把图书馆换成自动取款机。其中我有一个NSViewController子代,它以通常的方式加载xib:

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

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

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

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


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

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

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


它很可能是对
self
中某个对象所持有的块中的
self
的强烈引用。否则,这将是一个强有力的参考循环<代码>自我->其他->自我类似的东西。

要找到答案,请使用仪器。你能更具体一点吗?我已经试着分析分配情况,但是这个列表告诉我我在这里什么都用不了。使用泄漏工具。当应用程序运行时,找到泄漏的对象并单击内存地址(第3列)旁边的小圆圈箭头。视图将切换为显示对象的MM历史记录。您可以看到每个保留和释放发生在哪里。由你来决定哪个是额外的。控制器甚至没有出现在泄漏对象的列表中。似乎是一条死胡同。Tbh,我仍然很难理解这部分乐器。太多的噪音让我无法专注于我真正感兴趣的东西。但是,长时间盯着代码看(可能包括使用brain@MikeLischke-Heh——我知道这种感觉。我鼓励你找出分配工具。例如,通过最小化分配率,许多性能问题都得到了解决,这是一个很好的工具。