斯坦福公開課IOS7 閱讀筆記(第五課 視圖控制器生命周期)

1.課堂前半部分講述了一個關于UITextView的demo,詳細講了其屬性的用法。

2.view Controller Lifecycle

viewDidLoad 在整個生命周期中只會調用一次,禁止放視圖相關的初始化信息
viewWillLoad 在iOS開發(fā)中充當C的角色,其主要職責是管理內部各個view的加載顯示及寫在,同事負責其他viewcontroller之間的通信和協(xié)調、
在IOS中,有兩類ViewController,一類是顯示內容的,比如UIViewController、UITableViewController等,同時還可以自定義繼承自UIViewController的ViewController;另一類是ViewController容器,UINavigationViewController和UITabBarController等,UINavigationController是以Stack的形式來存儲和管理ViewController,UITabBarController是以Array的形式來管理ViewController.
首先,UIViewController中與其生命周期有關的幾個函數(shù)如下:

//類的初始化方法

  • (void)initialize;
    //對象初始化方法
  • (instancetype)init;
    //從歸檔初始化
  • (instancetype)initWithCoder:(NSCoder *)coder;
    //加載視圖
    -(void)loadView;
    //將要加載視圖
  • (void)viewDidLoad;
    //將要布局子視圖
    -(void)viewWillLayoutSubviews;
    //已經(jīng)布局子視圖
    -(void)viewDidLayoutSubviews;
    //內存警告
  • (void)didReceiveMemoryWarning;
    //已經(jīng)展示
    -(void)viewDidAppear:(BOOL)animated;
    //將要展示
    -(void)viewWillAppear:(BOOL)animated;
    //將要消失
    -(void)viewWillDisappear:(BOOL)animated;
    //已經(jīng)消失
    -(void)viewDidDisappear:(BOOL)animated;
    //被釋放
    -(void)dealloc;

上面這么多的函數(shù),乍一看什么復雜,其實關系什么明朗,除了initialize,init和initWithCoder不是存在所有對象的聲明周期中,其他函數(shù)都會在UIViewController的聲明周期中有序的被調用。那么具體的調用順序是怎樣的呢,最好的辦法是實踐一下,通過編號打印,結果如下:

230611_fCjT_2340880.png

這是一個ViewController完整的聲明周期,其實里面還有好多地方需要我們注意一下:
1:initialize函數(shù)并不會每次創(chuàng)建對象都調用,只有在這個類第一次創(chuàng)建對象時才會調用,做一些類的準備工作,再次創(chuàng)建這個類的對象,initalize方法將不會被調用,對于這個類的子類,如果實現(xiàn)了initialize方法,在這個子類第一次創(chuàng)建對象時會調用自己的initalize方法,之后不會調用,如果沒有實現(xiàn),那么它的父類將替它再次調用一下自己的initialize方法,以后創(chuàng)建也都不會再調用。因此,如果我們有一些和這個相關的全局變量,可以在這里進行初始化。
2:init方法和initCoder方法相似,只是被調用的環(huán)境不一樣,如果用代碼進行初始化,會調用init,從nib文件或者歸檔進行初始化,會調用initCoder。
3:loadView方法是開始加載視圖的起始方法,除非手動調用,否則在ViewController的生命周期中沒特殊情況只會被調用一次。
4:viewDidLoad方法是我們最常用的方法的,類中成員對象和變量的初始化我們都會放在這個方法中,在類創(chuàng)建后,無論視圖的展現(xiàn)或消失,這個方法也是只會在將要布局時調用一次。
5:viewWillAppear:視圖將要展現(xiàn)時會調用。
6:viewWillLayoutSubviews:在viewWillAppear后調用,將要對子視圖進行布局。
7:viewDidLayoutSubviews:已經(jīng)布局完成子視圖。
8:viewDidAppare:視圖完成顯示時調用。
9:viewWillDisappear:視圖將要消失時調用。
10:viewDidDisappear:視圖已經(jīng)消失時調用。
11:dealloc:controller被釋放時調用。
注意:經(jīng)過測試,從nib文件加載的controller,只要不釋放,在每次viewWillAppare時都會調用layoutSubviews方法,有時甚至會在viewDidAppare后在調用一次layoutSubviews,而重點是從代碼加載的則只會在開始調用一次,之后都不會,所以注意,在layoutSubviews中寫相關的布局代碼十分危險。

其他主要事項轉載自:http://my.oschina.net/u/2340880/blog/524564

3.NSNotification 通知
radio station機制

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容