應用程序的生命周期: http://www.cocoachina.com/ios/20150623/12244.html
Target-Action 機制: http://www.cocoachina.com/ios/20160111/14932.html
Not running:app還沒運行
Inactive:app運行在foreground但沒有接收事件
Active:app運行在foreground和正在接收事件
Background:運行在background和正在執(zhí)行代碼
Suspended:運行在background但沒有執(zhí)行代碼
大多數(shù)發(fā)生狀態(tài)轉(zhuǎn)換時都會調(diào)用delegate對象對應的方法來響應app的狀態(tài)改變察署。下面匯總了delegate對象的所有方法葛账,當app狀態(tài)發(fā)生轉(zhuǎn)換時,你可能會使用到它們。
application:willFinishLaunchingWithOptions: - 這個方法是你在啟動時的第一次機會來執(zhí)行代碼
application:didFinishLaunchingWithOptions: - 這個方法允許你在顯示app給用戶之前執(zhí)行最后的初始化操作
applicationDidBecomeActive: - app已經(jīng)切換到active狀態(tài)后需要執(zhí)行的操作
applicationWillResignActive: - app將要從前臺切換到后臺時需要執(zhí)行的操作
applicationDidEnterBackground: - app已經(jīng)進入后臺后需要執(zhí)行的操作
applicationWillEnterForeground: - app將要從后臺切換到前臺需要執(zhí)行的操作梅尤,但app還不是active狀態(tài)
applicationWillTerminate: - app將要結(jié)束時需要執(zhí)行的操作
ViewController的生命周期:http://blog.csdn.net/xyz_lmn/article/details/9022399
ViewController是iOS應用程序中重要的部分蛉迹,是應用程序數(shù)據(jù)和視圖之間的重要橋梁稠诲,ViewController管理應用中的眾多視圖舵匾。
iOS的SDK中提供很多原生ViewController,以支持標準的用戶界面册赛,例如表視圖控制器(UITableViewController)钠导、導航控制器(UINavigationController)震嫉、標簽欄控制器(UITabbarController)和iPad專有的UISplitViewController等。
按結(jié)構(gòu)可以對iOS的所有ViewController分成兩類:
1牡属、主要用于展示內(nèi)容的ViewController票堵,這種ViewController主要用于為用戶展示內(nèi)容,并與用戶交互逮栅,如UITableViewController悴势,UIViewController。
2证芭、用于控制和顯示其他ViewController的ViewController瞳浦。這種ViewController一般都是一個ViewController的容器担映。如UINavigationController废士,UITabbarController。
它們都有一個屬性:viewControllers蝇完。其中UINavigationController表示一種Stack式結(jié)構(gòu)官硝,push一個ViewController或pop一次,因此后一個ViewController一般會依賴前一個ViewController短蜕。而UITabbarController表示一個Array結(jié)構(gòu)氢架,各個ViewController是并列的。
ViewController的生命周期
ViewController生命周期會經(jīng)歷初始化朋魔、加載視圖岖研、銷毀視圖、生命結(jié)束等過程警检。
1.通過alloc init 分配內(nèi)存,初始化controller.
2.loadView
loadView方法默認實現(xiàn)[super loadView]
如果在初始化controller時指定了xib文件名,就會根據(jù)傳入的xib文件名加載對應的xib文件,如果沒傳xib文件名,默認會加載跟controller同名的xib文件,如果沒找到相關(guān)聯(lián)的xib文件,就會創(chuàng)建一個空白的UIView,然后賦給controller的view
3.viewDidLoad
當loadView創(chuàng)建完view之后孙援,此時view已經(jīng)完成加載了,會調(diào)用viewDidLoad方法扇雕;一般我會在這里做界面上的初始化操作拓售,比如添加按鈕,子視圖,等等.
4.viewWillAppear
當view在load完之后,將要顯示在屏幕之前會調(diào)用這個方法
在重寫這些方法時候最好先調(diào)用一下系統(tǒng)的方法之后在做操作。
5.viewDidAppear
當view已經(jīng)在屏幕上顯示出來之后,會調(diào)用這個方法
當一個視圖被移除屏幕并且銷毀的時候
6.viewWillDisappear
當視圖將要從屏幕上移除時候調(diào)用
7.viewDidDisappear
當視圖已經(jīng)從屏幕上移除時候調(diào)用
8.dealloc
view被銷毀時候調(diào)用镶奉,如果是手動管理內(nèi)存的話础淤,需要釋放掉之前在init和viewDidLoad中分配的內(nèi)存(類似alloc,new,copy);dealloc方法不能由我們主動調(diào)用,必須等引用計數(shù)為0時候由系統(tǒng)調(diào)用.
注意:viewDidUnload 在6.0之后已經(jīng)廢棄了哨苛。簡單來說鸽凶,對于iOS6,你不需要做任何以前viewDidUnload的事情建峭,更不需要把以前viewDidUnload的代碼移動到 didReceiveMemoryWarning方法中
ViewController加載view過程玻侥,見下圖(loadView)
ViewController卸載View過程見(unLoadView)
當一個視圖控制器被創(chuàng)建,并在屏幕上顯示的時候迹缀。 代碼的執(zhí)行順序
1使碾、 alloc 創(chuàng)建對象蜜徽,分配空間
2、init (initWithNibName) 初始化對象票摇,初始化數(shù)據(jù)
3拘鞋、loadView 從nib載入視圖 ,通常這一步不需要去干涉矢门。除非你沒有使用xib文件創(chuàng)建視圖
4盆色、viewDidLoad 載入完成,可以進行自定義數(shù)據(jù)以及動態(tài)創(chuàng)建其他控件
5祟剔、viewWillAppear 視圖將出現(xiàn)在屏幕之前隔躲,馬上這個視圖就會被展現(xiàn)在屏幕上了
6、viewDidAppear 視圖已在屏幕上渲染完成
當一個視圖被移除屏幕并且銷毀的時候的執(zhí)行順序物延,這個順序差不多和上面的相反
1宣旱、viewWillDisappear 視圖將被從屏幕上移除之前執(zhí)行
2、viewDidDisappear 視圖已經(jīng)被從屏幕上移除叛薯,用戶看不到這個視圖了
3浑吟、dealloc 視圖被銷毀,此處需要對你在init和viewDidLoad中創(chuàng)建的對象進行釋放
關(guān)于viewDidUnload :在發(fā)生內(nèi)存警告的時候如果本視圖不是當前屏幕上正在顯示的視圖的話耗溜, viewDidUnload將會被執(zhí)行组力,本視圖的所有子視圖將被銷毀,以釋放內(nèi)存,此時開發(fā)者需要手動對viewLoad抖拴、viewDidLoad中創(chuàng)建的對象釋放內(nèi)存燎字。 因為當這個視圖再次顯示在屏幕上的時候,viewLoad阿宅、viewDidLoad 再次被調(diào)用候衍,以便再次構(gòu)造視圖。