2015-06-19 76 views
-1

所以,我有一個導航控制器,它連接到視圖控制器。從該視圖控制器,你可以去一個相同的類型視圖控制器,但具有不同的內容。視圖控制器的內存很緊張,所以推新的每個新視圖都很昂貴。問題是,當我點擊後退按鈕並且視圖控制器被彈出時,內存不會自行釋放。有什麼我應該做的,就像我不使用零的東西等?因爲,假設我有5個圖像要顯示,每個圖像需要5到10MB的內存,當我將一個新的視圖控制器放在一個新的視圖控制器的頂部時,我花費了30-50mbs的內存,這沒關係,但是當我點擊「後退」按鈕並且視圖控制器彈出時,我預計會釋放這些50mbs。但情況並非如此。有人可以告訴我應該怎麼做來更有效地管理這個內存?Swift中的內存管理

另外,有沒有一種很好的方式來釋放UIImageView在Swift中使用的內存?

所以,更確切地說,視圖控制器的deinit不會在視圖控制器從導航堆棧中移出時被調用。這同樣適用於該視圖控制器的一些自定義子視圖。我如何確保它們被ARC清理乾淨,並且是否有任何工具可以幫助我跟蹤將這些內容保存在內存中的引用。

回答

2

好吧,我解決了它。每個人可能遇到同樣問題的快速提示。 1)擁有所有的領域(除了數字和書籍作爲可選項)。將它們清除出去。 2)把所有可以在內存中引用你的對象的東西都清空了,很容易忘記的一個很好的例子就是授權。如果您的觀點像委託人一樣行事,請不要忘記打破這種關係。 3)如果您在應用程序中使用地圖,建議使用一個共享地圖,並重新繪製並每次更改其委託,而不是使用即時本能的新地圖。地圖可能很難從內存中清除(我嘗試過map applyMemoryFix,它不起作用)

+0

謝謝,重複使用地圖爲我做了。我還調用mapView.removeAnnotations(myPolylines),而不是mapView.removeOverlays(myPolylines),這大概是我的地圖在內存中。 – Gmeister4

+0

p.s,我的deint沒有被稱爲由於參考週期,必須無視所有的一切viewWillDisappear – Gmeister4