0

我正在使用的 iPad 应用程序存在内存问题:它只有 3 个视图控制器和一个导航控制器。我使用 push segue 将视图控制器从 A 交换到 B,然后使用 push segue 交换到 C,然后使用 popToRootViewController 指令再次交换到 A。

我已经在所有视图控制器上实现了 didReceiveMemoryWarning,只是为了知道会发生什么:视图 B 已从内存中正确卸载,但视图 C 似乎复制了自身并消耗了内存!当我触发内存警告时,我可以看到几个视图 C 正在回答...

它看起来不像循环保留,因为我声明我所有的父母引用都是弱的,并且因为泄漏工具没有检测到任何泄漏,也没有保留周期,但是内存增加了。
这会在使用真正的 iPad 进行测试时导致崩溃。

我能做些什么 ?我在哪里可以看?是否可以要求导航控制器释放所有先前的对象,但当前屏幕上的对象除外?

编辑 :

鉴于 didload,我添加了一些观察者,如下所示:

 NSNotificationCenter *dnc = [NSNotificationCenter defaultCenter];
[dnc addObserver:self selector:@selector(undoManagerDidUndo:) name:NSUndoManagerDidUndoChangeNotification object:undoManager];
[dnc addObserver:self selector:@selector(undoManagerDidRedo:) name:NSUndoManagerDidRedoChangeNotification object:undoManager];

这样做是否有可能使 dnc 在某处保留对 self 的引用?

4

1 回答 1

1

如果您使用 ARC,则不必将它们归零。一旦不再有指向它们的强指针,ARC 应该自动释放它们。我不知道有一种方法可以查看哪个保留了它。可能有,但我已经看过但找不到方法。您应该删除所有 GestureRecognizers 和其他任何东西,以便它会解除分配。

于 2012-06-07T18:47:32.623 回答