你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> IOS開發(30)之UIViewController內存管理

IOS開發(30)之UIViewController內存管理

編輯:IOS開發綜合


iOS開發UIViewController內存管理是本文要介紹的內容,在 iOS 3.0 後,UIViewController 多了一個叫做 viewDidUnLoad 的方法。不少人都不清楚這個方法的具體意義,蘋果的文檔也就一句 ”Called when the controller’s view is released from memory” 簡單的解釋了下,並要求你把 IBOutlet 綁定的視圖給清空,為什麼呢?

  先看下 UIViewController 從創建 view 到展示的流程的幾個函數

  -initWithNibName:bundle:

這個方法是初始化一個 vc,但請注意 view 不是這時候載入的


  -loadView

  -viewDidLoad

  當一個視圖准備展現時,vc 首先會判斷 view 是否已經創建否則便通過之前指定的 xib 文件來初始化 view,以及綁定其他關系(若沒有指定 xib 文件,則默認會搜索和 vc 同名的 xib,比如 myNameViewController 就會搜索 myNameViewController.xib 文件)

  若是沒有 xib 文件,你就可以在 loadview 中自己手動創建這個 viewControoler 需要的視圖。接下來就是調用到 -viewDidLoad,許多人喜歡在這裡做些其他事情,比如做個 http 請求、建立個數組啥的。這裡若不處理正確,-viewDidUnload 激活時內存就容易洩露了,稍後提到。

  -view()appear

  -view()disappear

  這幾個方法就不解釋了

  -viewDidUnload

  該方法在收到內存警告,同時該視圖並不在當前界面顯示時候會被調用,此時該 controller 的 view 已經被釋放並賦值為 nil。

  接下來你要做的是把實例變量的子視圖釋放(IBOulet 的,以及自己添加的) 其他實例變量,比如之前在 -viewDidLoaded 中實例的數據數組、http 請求釋放掉

  因為當該 viewController 再次被激活准備顯示時(比如 navigationControler 返回到上一級),vc 發現自己的 view 為空後會重復之前的流程直到把 view 給創建起來。若沒將自己額外添加的子視圖、各種實例變量釋放,這裡便會重新再次創建,於是,內存洩露了。

在mac os 中,如果控件使用IBOutlet連接,而無@property(retain)屬性,則在dealloc不需要release; 如果有retai屬性,則需要release。

 


 

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved