2012-06-07 144 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