原文:https://blog.caramba.io/ios-uiviewcontroller-lifecycle-261e3e2f6133#.9o89edexh
翻譯水平有限,望賜教
UIViewController是ios sdk最常用的對象之一。重點要理解控制器的生命周期事件以及如何使用他們。
我們將關注用于加載視圖的事件
1.生命周期事件順序
- -(void)loadView()
- -(void)viewDidLoad()
- -(void)viewWillAppear()
- -(void)viewWillLayoutSubviews()
- -(void)viewDidLayoutSubviews()
- -(void)viewDidApear()
2.如何使用
-(void)loadView?—?創(chuàng)建控制器管理的視圖
僅限于代碼式創(chuàng)建控制器時調用,重寫此方法,你可以手動創(chuàng)建自己的view
-(void)viewDidLoad?—?控制器的視圖加載到內存中時調用
view創(chuàng)建好后調用。記住,view的bounds在此生命周期中不是最終數據,這里是初始化和設置對象的好地方
- (void)viewWillAppear:(BOOL)animated?—?通知控制器view即將加入到視圖層級中
視圖顯示到屏幕上的時候調用。到這一步時,view的bounds已經定義好,但orientation未確定。視圖顯示到屏幕時,每次都會調用這個方法,所以不要添加任何本應該只執(zhí)行一次的代碼(或者正確的使用)
-(void)viewWillLayoutSubviews?—告知控制器,view即將布局他的子視圖
每次frame改變的時候都會調用此方法。例如屏幕旋轉或者標記了更新(setNeedsLayout())在這里,view的bounds已經確定,如果沒有用autoresizing masks或者constraint或者視圖大小改變了,你應該在這里更新子視圖布局
-(void)viewDidLayoutSubviews?—?通知視圖控制器view已布局好子視圖
布局好子視圖后,在此處做其他修改
-(void)viewDidAppear:(BOOL)animated?—?通知視圖控制器view已經加入到視圖層級中
執(zhí)行有關視圖呈現(xiàn)的其他任務(如動畫)此方法在顯示動畫后執(zhí)行。因此,在這里view對用戶已經可見
這里是從core data或者網絡服務器,加載請求數據顯示數據的好地方