我們知道,建立viewcontroller時,執行順序是loadview -> viewdidload。
當收到記憶體警告時,如果viewcontroller未顯示(在後台),會執行didreceivememorywarning -> viewdidunload;如果viewcontroller當前正在顯示(在前台),則只執行didreceivememorywarning。
當重新顯示該viewcontroller時,執行過viewdidunload的viewcontroller(即原來在後台)會重新呼叫loadview -> viewdidload。
因此主要注意下面幾個函式:
loadview
建立view,構建介面;
viewdidload
做些初始化工作。由於在初次建立viewcontroller和重新恢復時都會呼叫,因此這個函式需要注意區分不同的情況,設定正確的狀態。
didreceivememorywarning
釋放不必須的記憶體,比如快取,未顯示的view等。
viewdidunload
最大程度的釋放可以釋放的記憶體。比如應該釋放view,這些view在呼叫loadview後可以重新生成。(其中成員變數釋放後應設定為nil)。對於非介面的資料是否釋放,需要具體分析,可以恢復的資料可以釋放,不能恢復的資料就不要釋放。
實際中如果viewcontroller是用xib生成的介面,則需要我們做的就比較少,主要是在viewdidload中恢復原來的介面狀態。
如果是通過程式設計建立的介面,則需要做的工作就要更多些,上面4個函式中都需要進行正確處理。
如何正確處理事情
從周一回去,到今天回來,正好四天。這次父親的手術,中間出現了事故,碰破了動脈血管,造成大出血達到3600ml,幾乎是全身的血量。而且山化醫院沒有血,潞城也沒有,幸好有人及時從長治送血回來,才挽救了父親的生命。還有尿管插的不好,造成尿道損傷的問題。切除腎是乙個大手術,存在較大的風險,而在山化這樣醫療條...
查詢條件未正確處理
rmusecredittx.intentupletterflag 2 and rmusecredittx.epolicyuploadsize 5 and hqlqueryrule.addin rmusecredittx.epolicyuploadflag 0,3 split 錯誤現象 只能查到epo...
iOS中正確處理dealloc方法
當我們繼承類的時候,子類例項在構造的時候順序是先高用父類的構造方法,再呼叫子類的構造方法。在c c 是如此,在objc中也是如此,在ios開發中,我們會看到這樣的 1.void init 2.8.9.return self 10.看到沒,初始化的時候都是先呼叫父類的初始化方法,為什麼呢,因為父類更老...