2012-06-07 76 views
0

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

我已经在所有的视图控制器上实现了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保持一个参考保留自我的地方?

+0

您必须发布代码。 :) –

+0

代码的哪些部分可能会有用? – Diwann

+0

如果你的观点是alloc/inited,发生“交换”,你的didReceiveMemoryWarning等 –

回答

1

如果您使用的是ARC,则不必删除它们。一旦不存在强指针,ARC应该自动释放它们。我不知道有哪一种方法可以看到哪一个保留它。可能有,但我看了,找不到方法。你应该删除所有的GestureRecognizers和其他东西,以便解除分配。

+0

超级! dealloc方法现在正在解雇。 – Diwann