一爷耀、UIViewCOntroller(視圖View)的生命周期
說(shuō)是 ViewController 的生命周期,其實(shí)指的是它控制的視圖(View)的生命周期。每當(dāng)視圖的狀態(tài)發(fā)生變化時(shí),視圖控制器會(huì)自動(dòng)調(diào)用一系列方法來(lái)響應(yīng)變化。
通過(guò)這些方法埠啃,我們就可以跟蹤到視圖的整個(gè)生命周期。各個(gè)方法按執(zhí)行順序排列如下:
1.init:
初始化程序
2.loadView:
視圖初始化
這個(gè)方法不應(yīng)該被直接調(diào)用畦攘,而是由系統(tǒng)自動(dòng)調(diào)用霸妹。它會(huì)加載或創(chuàng)建一個(gè) view 并把它賦值給 UIViewController 的 view 屬性。
同時(shí)重寫(xiě) loadView 方法的時(shí)候知押,不要調(diào)用父類(lèi)的方法叹螟。
3.viewDidLoad:
視圖加載完成,但還沒(méi)在屏幕上顯示出來(lái)
我們可以重寫(xiě)這個(gè)方法台盯,對(duì) view 做一些其他的初始化工作罢绽。比如可以移除一些視圖,修改約束静盅,加載數(shù)據(jù)等良价。
4.viewWillAppear:
在視圖即將顯示在屏幕上時(shí)調(diào)用
我們可以在這個(gè)方法里,改變當(dāng)前屏幕方向或狀態(tài)欄的風(fēng)格等蒿叠。
5.viewDidApper:
在視圖顯示在屏幕上時(shí)調(diào)用時(shí)調(diào)用
我們可以在這個(gè)方法中明垢,對(duì)視圖做一些關(guān)于展示效果方面的修改。
6.viewWillDisappear:
視圖即將消失市咽、被覆蓋或是隱藏時(shí)調(diào)用
7.viewDidDisappear:
視圖已經(jīng)消失痊银、被覆蓋或是隱藏時(shí)調(diào)用
8.viewVillUnload:
當(dāng)內(nèi)存過(guò)低時(shí),需要釋放一些不需要使用的視圖時(shí)施绎,即將釋放時(shí)調(diào)用
9.viewDidUnload:
當(dāng)內(nèi)存過(guò)低溯革,釋放一些不需要的視圖時(shí)調(diào)用。
注意:
自 iOS6 起谷醉,viewWillUnload 和 viewDidUnload
這兩個(gè)方法被廢除了致稀。當(dāng)系統(tǒng)發(fā)出內(nèi)存警告的時(shí)候,
會(huì)自動(dòng)把 view 給清除掉俱尼,不用我們?cè)偬貏e處理抖单。
二、AppDeleGate的生命周期
AppDelegate類(lèi)中定義了app進(jìn)入不同生命周期(包括app啟動(dòng)動(dòng)、閑置矛绘、進(jìn)入后臺(tái)躺酒、進(jìn)入前臺(tái)、激活蔑歌、完全退出)時(shí)的回調(diào)方法。實(shí)際上在app啟動(dòng)時(shí)揽碘,app會(huì)自動(dòng)執(zhí)行一個(gè)叫main的入口函數(shù)次屠,它通過(guò)調(diào)用UIApplicationMain函數(shù)來(lái)創(chuàng)建出AppDelegate類(lèi)實(shí)例,并委托其實(shí)現(xiàn)app在不同生命周期的定制行為雳刺。
各個(gè)程序運(yùn)行狀態(tài)時(shí)代理的回調(diào):
1劫灶、application didFinishLaunchingWithOptions:
當(dāng)應(yīng)用程序啟動(dòng)時(shí)執(zhí)行,應(yīng)用程序啟動(dòng)入口掖桦, 只在應(yīng)用程序啟動(dòng)時(shí)執(zhí)行一次本昏。若用戶直接啟動(dòng),lauchOptions內(nèi)無(wú)數(shù)據(jù),若通過(guò)其他方式啟動(dòng)應(yīng)用枪汪,lauchOptions包含對(duì)應(yīng)方式的內(nèi)容涌穆。
2、applicationWillResignActive:
在應(yīng)用程序?qū)⒁?strong>活動(dòng)狀態(tài)切換到非活動(dòng)狀態(tài)時(shí)候雀久,要執(zhí)行的委托調(diào)用 ,在此期間宿稀,應(yīng)用程序不接收消息或事件邓夕,如 按下 home 按鈕忠烛,返回主屏幕,或全屏之間切換應(yīng)用程序等麻养。
3越庇、applicationDidEnterBackground:
在應(yīng)用程序已進(jìn)入后臺(tái)程序時(shí)罩锐,要執(zhí)行的委托調(diào)用。
4卤唉、applicationWillEnterForeground:
在應(yīng)用程序將要進(jìn)入前臺(tái)時(shí)(被激活)涩惑,要執(zhí)行的委托調(diào)用,剛好與applicationWillResignActive 方法相對(duì)應(yīng)搬味。
5境氢、applicationDidBecomeActive:
在應(yīng)用程序已被激活后,要執(zhí)行的委托調(diào)用碰纬,剛好與applicationDidEnterBackground 方法相對(duì)應(yīng)萍聊。
6、applicationWillTerminate:
在應(yīng)用程序要完全推出的時(shí)候悦析,要執(zhí)行的委托調(diào)用寿桨,這個(gè)需要要設(shè)置UIApplicationExitsOnSuspend的鍵值。
三、繼承和擴(kuò)展的區(qū)別
類(lèi)擴(kuò)展:
如果在某個(gè)特定的應(yīng)用場(chǎng)景中你發(fā)現(xiàn)現(xiàn)有的類(lèi)缺少某項(xiàng)功能
那么可以通過(guò)類(lèi)擴(kuò)展的方式現(xiàn)場(chǎng)添加這項(xiàng)功能亭螟。
繼承:
從已有的類(lèi)創(chuàng)建新類(lèi)的過(guò)程挡鞍,提供繼承信息的稱(chēng)為父類(lèi)(超類(lèi)/基類(lèi)),得到繼承信息的稱(chēng)為子類(lèi)(派生類(lèi)/衍生類(lèi))预烙,對(duì)象中的變量可以直接拿過(guò)來(lái)使用墨微,通常子類(lèi)除了得到父類(lèi)的繼承信息還會(huì)增加一些自己特有的屬性,所以子類(lèi)的能力一定比父類(lèi)更強(qiáng)大扁掸。
繼承的意義在于子類(lèi)可以復(fù)用父類(lèi)的代碼并且增強(qiáng)系統(tǒng)現(xiàn)有的功能翘县。
四、OC和Swift的混編
1.創(chuàng)建橋接文件
首先我們直接在當(dāng)前項(xiàng)目上新增加一個(gè)文件谴分,語(yǔ)言選擇swiftt锈麸,然后創(chuàng)建,此時(shí)牺蹄,會(huì)彈出一個(gè)框忘伞,詢問(wèn)你是否需要Xcode自動(dòng)幫你創(chuàng)建一個(gè)橋接文件,當(dāng)然我們選擇是啦沙兰!點(diǎn)擊“Create Bridging Header”氓奈,然后我們就發(fā)現(xiàn),項(xiàng)目目錄下多了兩個(gè)文件:一個(gè)是我們創(chuàng)建的文件僧凰,另外一個(gè)是Xcode給我們創(chuàng)建的橋接文件探颈。
2. OC和swift通信的中間人:
當(dāng)然就是這個(gè)橋接文件了。我們把swift 要引入的oc 的類(lèi)训措,在這個(gè)文件里導(dǎo)入伪节,然后再Command+B 一下,看绩鸣,紅叉沒(méi)有了以后怀大,swift 要用到哪個(gè)oc 的類(lèi),import 到這個(gè) 橋接文件呀闻,這樣化借,swift類(lèi)就可以愉快得和oc 的類(lèi)進(jìn)行通信了。這樣oc 就可以訪問(wèn)swift了捡多。
五蓖康、繼承和類(lèi)別的區(qū)別
六、get和post請(qǐng)求方式的區(qū)別
Get是從服務(wù)器上獲取數(shù)據(jù)垒手,Post是向服務(wù)器傳送數(shù)據(jù)蒜焊。
對(duì)于Get方式,服務(wù)器端用Requset.QueryString獲取變量的值科贬,
對(duì)于Post方式泳梆,服務(wù)器端用Request.Form獲取提交的數(shù)據(jù)。
Get是把參數(shù)數(shù)據(jù)隊(duì)列加到提交表單的ACTION屬性所指的URL中,值和表單內(nèi)個(gè)個(gè)字段一一對(duì)應(yīng)优妙,在URL中可以看到乘综。
Post是通過(guò)HTTP Post機(jī)制,將表單內(nèi)各個(gè)字段與其內(nèi)容放置在HTML HEADER內(nèi)一起傳送到ACTION屬性所指的URL地址套硼。用戶看不到這個(gè)過(guò)程卡辰。
Get安全性非常低,Post安全性較高邪意,但是Get方式的執(zhí)行效率比Post好看政。
所以建議使用Get做查詢,使用Post做增抄罕、刪、改于颖。