1. 程式人生 > >【iOS知識學習】_檢視控制物件生命週期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear等的區別及用途

【iOS知識學習】_檢視控制物件生命週期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear等的區別及用途

iOS檢視控制物件生命週期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear、viewDidDisappear的區別及用途

init-初始化程式

viewDidLoad-載入檢視

viewWillAppear-UIViewController物件的檢視即將加入視窗時呼叫;

viewDidApper-UIViewController物件的檢視已經加入到視窗時呼叫;

viewWillDisappear-UIViewController物件的檢視即將消失、被覆蓋或是隱藏時呼叫;

viewDidDisappear-UIViewController物件的檢視已經消失、被覆蓋或是隱藏時呼叫;

viewVillUnload-當記憶體過低時,需要釋放一些不需要使用的檢視時,即將釋放時呼叫;

viewDidUnload-當記憶體過低,釋放一些不需要的檢視時呼叫。

        檢視控制物件通過alloc和init來建立,但是檢視控制物件不會在建立的那一刻就馬上建立相應的檢視,而是等到需要使用的時候才通過呼叫loadView來建立,這樣的做法能提高記憶體的使用率。比如,當某個標籤有很多UIViewController物件,那麼對於任何一個UIViewController物件的檢視,只有相應的標籤被選中時才會被創建出來。

比如如下程式碼:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
        UITabBarItem *tbi = [self tabBarItem];
        [tbi setTitle:@"CurrentTime"];
        [[self view ] setBackgroundColor:[UIColor yellowColor]];
        }
    return self;
}

我們將UIViewController的init方法中訪問的例項變數view在init中將背景設定為黃色,執行程式,我們能發現背景的確變成了黃色,但是,在我們還沒有需要使用檢視的時候,該檢視已經載入好了,在UIViewController的初始方法中訪問例項變數view,會導致延遲載入機制失效,這個問題看上去不是很嚴重,但是如果考慮到記憶體過低警告,那麼問題就大了。。。

執行程式,選擇模擬器中的硬體->模擬記憶體過低警告,我們會發現,原本設定的黃色背景不見了,這是因為,記憶體過低,檢視控制物件會在發出記憶體過低警告時收到didReceiveMemoryWarning訊息,該方法預設實現,檢查檢視控制物件的檢視是否可見,如果不可見,則釋放掉,下次在載入該檢視時就不會執行init方法,而是隻執行viewDidLoad方法,所以需要將[[

selfview ] setBackgroundColor:[UIColoryellowColor]];放到viewDidLoad中,這樣如果檢視因為記憶體過低被釋放掉了,下次需要使用到該檢視的時候,程式會預設取執行該檢視的viewDidLoad方法,這樣背景顏色就又出來了。

init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear、viewDidDisappear的執行順序:

 從程式的log來看:

2012-10-19 15:51:44.811inHyron[483:b903] init

2012-10-19 15:51:54.081inHyron[483:b903] viewDidLoad

2012-10-19 15:51:54.082inHyron[483:b903] viewVillAppear

2012-10-19 15:51:54.084 inHyron[483:b903] viewDidAppear

很明顯,先執行init、然後執行viewDidLoad,然後是viewWillAppear最後是viewDidAppear,這樣檢視就建立好了,當檢視消失或者被覆蓋的時候:

2012-10-19 15:54:14.557inHyron[483:b903] viewWillDisappear

2012-10-19 15:54:14.558inHyron[483:b903] viewDidDisappear

這樣一來檢視就消失了,當模擬記憶體警告的時候:

2012-10-19 15:55:14.333inHyron[483:b903] Received simulated memory warning.

2012-10-19 15:55:14.334inHyron[483:b903] viewWillUnload

2012-10-19 15:55:14.335 inHyron[483:b903]viewDidUnload

從log可以看出,當檢視控制物件收到記憶體警告的時候,程式會執行viewWillUnload最後是執行viewDidUnload。

這樣,一套的流程就完成了,不知道寫的是否詳細。。。。



相關推薦

iOS知識學習_檢視控制物件生命週期-initviewDidLoadviewWillAppearviewDidAppearviewWillDisappear區別用途

iOS檢視控制物件生命週期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear、viewDidDisappear的區別及用途 init-初始化程式 viewDidLoad-載入檢視 viewWil

_檢視控制物件生命週期-initviewDidLoadviewWillAppearviewDidAppearviewWillDisappear區別用途

iOS檢視控制物件生命週期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear、viewDidDisappear的區別及用途 init-初始化程式 viewDidLoad-載入檢視 view

iOS檢視控制物件生命週期: initviewDidLoadviewWillAppearviewDidAppearviewWillDisappearviewDidDisappear的區別

iOS檢視控制物件生命週期: init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear、viewDidDisappear的區別及用途 init-初始化程式 viewDidLoad-載入檢視 viewWillAppear-UIVi

iOS知識學習_intNSIntegerNSUIntegerNSNumber的區別和聯絡

1、首先先了解下NSNumber型別: NSNumber是NSValue的一個子類,它是一個物件來儲存數字值包括bool型,它提供了一系列的方法來儲存char a signed or unsigned char, short int, int, long int, lon

iOS知識學習_iOS沙盒機制

IOS中的沙盒機制(SandBox)是一種安全體系,它規定了應用程式只能在為該應用建立的資料夾內讀取檔案,不可以訪問其他地方的內容。所有的非程式碼檔案都儲存在這個地方,比如圖片、聲音、屬性列表和文字檔案等。 1.每個應用程式都在自己的沙盒內 2.不能隨意跨越自己的沙盒去訪問

CV知識學習神經網路梯度與歸一化問題總結+highway networkResNet的思考

目錄   一、梯度消失/梯度爆炸的問題 二、選擇其他啟用函式 三、層歸一化 四、權值初始化 五、調整網路的結構 一、梯度消失/梯度爆炸的問題 首先來說說梯度消失問題產生的原因吧,雖然是已經被各大牛說爛的東西。不如先看一個簡單的網路

ios開發學習Cocoa 新的依賴管理工具:Carthage

說到 iOS 的依賴管理工具,大家一定首先想到的是 CocoaPods ,不錯,CocoaPods 確實是一個很好依賴管理工具,已然成為了 Cocoa 依賴管理的標準,豐富的支援庫、文件等等,CocoaPods 相關的文章有很多,這裡就不一一贅述了。 今天要介紹的是一款新的依賴管理工具,名曰 “Cart

Java併發基礎Java執行緒的生命週期

前言 執行緒是作業系統中的一個概念,支援多執行緒的語言都是對OS中的執行緒進行了封裝。要學好執行緒,就要搞清除它的生命週期,也就是生命週期各個節點的狀態轉換機制。不同的開發語言對作業系統中的執行緒進行了不同的封裝,但是對於執行緒的宣告週期這部分基本是相同的。下面先介紹通用的執行緒生命週期模型,然後詳細介紹Ja

iOS開發-51案例學習:動畫新寫法刪除子視圖視圖順序延遲方法button多功能使用方法icon圖標和啟動頁設置

無法查看 font targe 技術 value lstat tostring sta dict 案例效果: (1)導入所需的素材,然後用storyboard把上半截位置和大小相對固定的東西布局起來。當然,這些控件也要定義成對應地IBOutlet和IBActio

知識學習Sublime Text 快捷鍵精華版

輸入 效果 不同的 文件夾 nbsp enter 尾插 文件瀏覽 相同 1 Sublime Text 3 快捷鍵精華版 2 Ctrl+Shift+P:打開命令面板 3 Ctrl+P:搜索項目中的文件 4 Ctrl+G:跳轉到第幾行 5 Ctrl+W:關

C語言學習《C Primer Plus》第6章 C控制語句:循環

double 編程練習 判斷 http 學習 main 靈活 n-1 都在 學習總結 1、循環的語法跟其他語言的沒差多少,可能大多數語言都在C的基礎上發展出來的,所以大同小異不奇怪。 2、在判斷表達式裏,C語言只有0被認為是假,所有非零值正整數都被認為真。

基礎知識集成學習

大致 p s 學習方法 ron 完成 ima 結合 alt http 難點:如何產生“好而不同”的個體學習器;“好而不同”:“準確性”和“多樣性” 一、個體與集成 構建並結合多個學習器來完成學習任務 集成:結果通過投票法voting產生,“少數服從多數” 獲得整體性能提升要

知識學習如何零基礎入門資料分析

隨著資料分析相關領域變得火爆,最近越來越多的被問到:資料分析如何從頭學起?其中很多提問者都是商科背景,之前沒有相關經驗和基礎。 我在讀Buisness Analytics碩士之前是商科背景,由於個人興趣愛好,從大三開始到現在即將碩士畢業,始終沒有停下自學的腳步。Coursera和EDX等平臺上大概上過20多

JAVA基礎知識學習Java中的String,StringBuilder,StringBuffer三者的區別

  最近在學習Java的時候,遇到了這樣一個問題,就是String,StringBuilder以及StringBuffer這三個類之間有什麼區別呢,自己從網上搜索了一些資料,有所瞭解了之後在這裡整理一下,便於大家觀看,也便於加深自己學習過程中對這些知識點的記憶,如果哪

《OpenCV3程式設計入門》第6章-學習筆記1-線性濾波:方框濾波+均值濾波+高斯濾波理論知識基礎

目錄 影象濾波的目的: 濾波處理的要求  平滑濾波目的有兩類 OpenCV常用線性濾波器: OpenCV常用非線性濾波器: 線性濾波器定義及常用的線性濾波器: 濾波和模糊 鄰域運算元與線性濾波器  OpenCV常用線性濾波器: 【方框濾波(

大資料學習大資料學習基礎知識總綱

大資料需要學習什麼?很多人問過我這個問題。每一次回答完都覺得自己講得太片面了,總是沒有一個合適的契機去好好總結這些內容,直到開始寫這篇東西。大資料是近五年興起的行業,發展迅速,很多技術經過這些年的迭代也變得比較成熟了,同時新的東西也不斷湧現,想要保持自己競爭力的唯一辦法就是不斷學習。 大資

iOS知識樹,知識點(包括物件Block訊息轉發GCD執行時runloop動畫PushKVOtableview,UIViewController提交AppStore)

        本文旨在總結iOS知識網路,知識點,該知識網路羅列出常見UIKit、Foundation的物件特點和一些使用經驗,可以看成是一本書;文字編輯採用樹的形式,對知識點進行羅列,並標註一些使用經驗(★)希望對初學者有用或給一些解決疑難雜症者提供思路;某些知識點會深入

Unity 3D學習鍵盤控制人物在場景中移動

一、第一種情況,鍵盤左右鍵控制人物旋轉,讓人物可以面向四方,然後上下鍵控制移動。 public float speed = 3.0F; public float rotateSpeed = 3.0F; CharacterController controller; voi

周邊知識學習積累——關於UEFI和雙系統

複習思考: 如何跟路人解釋什麼是UEFI? ESP分割槽的全稱是什麼? windows下如何訪問被隱藏的分割槽?  一、什麼是UEFI? UEFI 新型UEFI,全稱“統一的可擴充套件韌體介面”(Unified Extensible Firmware Interfa

大資料學習大資料學習的基礎知識

學習之前沒搞清楚的知識 傳統的web應用(LAMP、JavaEE、NODE系等)與大資料什麼關係? 之前一直以為大資料的東西就是來取代傳統的Web應用的,其實並不是這樣;即使是大資料的架構,應用層依然會是傳統的web應用,但是會根據資料特點對資料儲存(結構化資料依然會儲存在傳統的關係型資料庫——如My