2017-04-16 54 views
0

我是ios開發新手,請原諒無知。我注意到,當我使用UICollectionViewCell時,我可以調用dequeueReusableCell來實例化或調用現有的單元格。我想知道是否有類似的視圖控制器。或者,如果沒有什麼是正確的方式來防止在應用程序中導航時不必要地重新實例化視圖控制器?使用instantiateViewController時防止內存泄漏

回答

0

如果您使用navigationController例如iPhone的設置>>常規>>關於。

當您在設置中時,沒有加載GeneralVC。當你去一般,那麼你現在有SettingVC & GeneralVC但沒有AboutVC。如果你去About,然後回到General,那麼AboutVC將被完全釋放。

對於navigationControllers每次加載的viewController的viewDidLoad將被調用。


對於tabBarControllers,像你的手機應用程序,所有選項卡(收藏,最近,聯繫人,鍵盤,語音信箱)總是在內存中。他們不會被釋放。如果你在KeypadVC上,那麼所有其他的VC仍然在內存中。 對於每次加載viewController時的tabBarControllers,viewWillAppear都會被調用。在第一次加載時,viewDidLoad將被調用。

因此,取決於你在做什麼(tabBarController或navigationcontroller),viewController可能會或可能不會存在後,你離開它。

此外我發現this comment thread和問題有關。這個問題有點老,但它有助於你更好地理解一些舊的答案和你的這個問題。

0

我想你的意思是這樣ARC(自動引用計數),它在迅速發生在你的應用程序重新分配每部分沒用,再利用內存的控制。你不應該打擾這個,因爲這是完全自動的,例如。如果你的vc已經被實例化,並且你已經移動到另一個vc弧,將會釋放該第一個vc,因爲沒有任何對它的引用,並且唯一的問題是如果你錯誤地連接(引用)到第一個vc一些(主要)關閉在您的應用程序,然後ARC不會從內存中刪除該vc,因爲連接仍然存在,ARC知道它 - 然後你有泄漏,並檢查如果您的應用程序用戶界面的每個部分都是釋放的方便的工具正確的是由Apple提供的儀器。

0

表和收集細胞再利用自己的看法,因爲用戶往往通過多個項目滾動速度非常快,並拆除,並對每個項目重新分配內存不夠高效爲表現良好。視圖控制器也是如此,因此它們不需要這種機制。

有多個視圖控制器的實例是好的;這不是內存泄漏。