2014-04-29 27 views
-2

我有單身人士。我的單身人士擁有UIViewController屬性。當我推一些視圖控制器時,我將推視圖控制器設置爲單例屬性。iOS單身屬性內存泄漏

例如我推乙視圖控制器從A視圖控制器

和內部乙視圖控制器初始化代碼我設置單例的屬性:

初始化代碼內:

Singleton *singleton = [Singleton sharedInstance]; 
singleton.viewController = self; 

此代碼意味着即使當我彈回到前一個控制器A時,實例B永遠不會被破壞,因爲我認爲,似乎我會有內存泄漏。

所以每當我推B控制器時,我會增加內存使用量。

如何解決它。我試過使用弱而不是單身屬性強,但我不知道這是解決方案。

對於我的預期方式 - 就像級聯摧毀。但也許我很困惑,這段代碼不會導致內存泄漏。你怎麼看。

+1

你爲什麼要在一個Singleton中存儲一個VC? (以及爲什麼你使用單身人士?)對我來說這似乎不太好。你想做什麼? – Odrakir

+0

噢,我認爲單身人士是一些很好的解決方案。我也同意你在單身存儲UIViewController這不是一個好主意。但我使用的是谷歌驅動器api和dropbox API,並且想要創建一個通用雲模塊,這將允許我和其他用戶使用任何雲而不需要任何複雜的步驟。所以這些API驅動和框使用視圖控制器實例來呈現登錄視圖。而對於通用變體,我需要訪問將呈現此登錄表單的視圖控制器。所以在任何情況下,問題都是關於泄漏,似乎我們有答案,謝謝! –

回答

2

不是。你沒有泄露實例,因爲你仍然有一個參考。並且內存使用量不會增加,因爲下次您推送B時它將自己設置爲單例並替換先前的實例(然後將被釋放)。

一般來說,如果你確實想要存儲引用,你應該使它變得很弱,並且/或者當視圖控制器從父代中移除時,它們會自行移除。

+0

謝謝你的回答。所以它意味着B會在回彈後被銷燬。弱財產將沒有價值。對? –

+0

是的(假設你正在運行> iOS 4) – Wain