凡是開(kāi)發(fā)iOS的童鞋吠各,一定都繞不開(kāi)ViewController,ViewController提供默認(rèn)的View勉抓,以供界面顯示贾漏,提供push和present方法以供界面切換。ViewController為何有如此地位藕筋?下面來(lái)詳細(xì)分析纵散。
ViewController 有兩種類(lèi)型:
A型:負(fù)責(zé)內(nèi)容的 ViewController:就是我們常用的這種。
B型:負(fù)責(zé)容納 A型 的 ViewController念逞,它負(fù)責(zé)導(dǎo)航和彈出其它視圖控制器困食。
View管理
維護(hù) View ?的層級(jí):
ViewController 與 Root View,每個(gè)View 與其子 View 都是強(qiáng)引用的關(guān)系翎承。
A型ViewController管理自己的子View硕盹,而B(niǎo)型ViewController只管理子ViewController的Root View,如下圖中的 split view controller叨咖,其決定了子ViewController的RootView 的位置和大小瘩例。
數(shù)據(jù)整合
ViewController 是數(shù)據(jù)對(duì)象和所擁有的View 的中間人,它擁有能決定View外觀(位置甸各、大卸庀汀)的方法和屬性,因此常繼承ViewController趣倾,添加自己需要的處理數(shù)據(jù)的變量聘惦,并添加它們與View 的關(guān)系邏輯。
編程上注意儒恋,務(wù)必保證數(shù)據(jù)對(duì)象與ViewController的分離善绎,如數(shù)據(jù)完整性等檢查,應(yīng)該由數(shù)據(jù)對(duì)象來(lái)完成诫尽。ViewController需要將View獲得的用戶(hù)輸入數(shù)據(jù)格式化成數(shù)據(jù)對(duì)象要求的格式禀酱,但不應(yīng)該管理實(shí)際數(shù)據(jù),因此ViewController所擁有的牧嫉,只是數(shù)據(jù)對(duì)象的緩存剂跟。
用戶(hù)交互
ViewController 負(fù)責(zé)響應(yīng)鏈,并通過(guò)代理方法和事件方法處理View獲得的用戶(hù)行為事件酣藻。
資源管理
ViewController 實(shí)例化(init)掌管數(shù)據(jù)的 Model 對(duì)象曹洽,實(shí)例化需要顯示的子視圖 View,并且由于它擁有以上兩者辽剧,因此可以直接訪問(wèn)以上兩者的所有屬性和方法衣洁,并且負(fù)責(zé)釋放它們。UIKit本身會(huì)釋放ViewController中的對(duì)象抖仅,如果繼承坊夫,需要明確釋放自定義的部分。內(nèi)存不足時(shí)撤卢,及時(shí)釋放部分對(duì)象內(nèi)存环凿,由于ViewController擁有的只是數(shù)據(jù)對(duì)象的緩存數(shù)據(jù),因此在收到 didReceiveMemoryWarning?方法時(shí)放吩,可以安全的釋放內(nèi)存智听。
設(shè)備適配
ViewController有能力獲得設(shè)備的物理尺寸和實(shí)際顯示尺寸,并且檢查到設(shè)備的方向渡紫,因此能夠根據(jù)這些信息調(diào)整View的布局到推。