程序的啟動(dòng):
1、當(dāng)app啟動(dòng)時(shí)燃少,會(huì)檢查info.plist文件,找到并加載編譯后的二進(jìn)制文件阵具,應(yīng)用程序開(kāi)始解包主故事版中的內(nèi)容,然后開(kāi)始運(yùn)行代碼阳液。
2球拦、當(dāng)應(yīng)用程序加載完之后貌亭,應(yīng)用程序委托收到applicationDidFinishLaunching(_, withOption:)方法躁染。options字典中包含了描述應(yīng)用程序啟動(dòng)環(huán)境的信息,比如是通過(guò)怎樣的方式啟動(dòng)的(點(diǎn)擊推送消息或者icon等)虽填。
多任務(wù):
當(dāng)一個(gè)程序退出時(shí)(只是點(diǎn)了home丁恭,或者另外一個(gè)程序啟動(dòng)了),它將被掛起,它并沒(méi)有退出卤唉,只是暫停執(zhí)行代碼涩惑,同時(shí)它的內(nèi)存被鎖定,當(dāng)程序恢復(fù)時(shí)竭恬,它會(huì)從停止的位置重新開(kāi)始執(zhí)行熬的。
但是由于iPhone的硬件資源有限,所以如果內(nèi)存不足時(shí)押框,被掛起的程序會(huì)被直接終止,而且不會(huì)有任何通知橡伞。這就意味著,如果有必要兑徘,當(dāng)你的程序進(jìn)入后臺(tái)時(shí),你就需要保存一些關(guān)鍵的數(shù)據(jù)藕漱。
tip:如果可能的話崭闲,盡量將內(nèi)存數(shù)量降到16MB以下。當(dāng)程序被掛起而且內(nèi)存使用量低于16MB時(shí)刁俭,系統(tǒng)會(huì)將這個(gè)程序的內(nèi)存存儲(chǔ)到閃存中,并將其從內(nèi)存中徹底移除沙兰。(因?yàn)檫€沒(méi)有學(xué)到如何計(jì)算內(nèi)存使用量翘魄,所以后面學(xué)到之后再在這更新)舀奶。
應(yīng)用程序可以申請(qǐng)?jiān)诤笈_(tái)短時(shí)間運(yùn)行,最長(zhǎng)時(shí)間不超過(guò)10分鐘。10分鐘結(jié)束時(shí)候罗岖,必須告訴OS已經(jīng)完成或者將被終止(不是掛起)腹躁。
我們注冊(cè)一個(gè)需要在后臺(tái)執(zhí)行一段時(shí)間的后臺(tái)任務(wù)(operationWithBlock部分),和一個(gè)時(shí)間耗盡時(shí)執(zhí)行的block纺非。如果你的任務(wù)在時(shí)間耗盡時(shí)(也就是時(shí)間耗盡時(shí)候執(zhí)行的block返回之前),你的任務(wù)沒(méi)有執(zhí)行完弱左,也就是沒(méi)有執(zhí)行endBackgroundTask的時(shí)候,程序?qū)⒅苯颖唤K止炕淮。
tip:后臺(tái)執(zhí)行任務(wù)的時(shí)間并不一定是連續(xù)的,這些時(shí)間可能被分成多段涂圆,以延長(zhǎng)電池使用壽命.
iOS7引入的兩種后臺(tái)運(yùn)行任務(wù)的方式:后臺(tái)獲取、后臺(tái)通知
后臺(tái)獲饶O痢:要是用此方式需要做兩件事卡辰;1、Capabilities->BackgroundModes->勾選Background Fetch九妈;2、在你的代碼中調(diào)用setMinimumBackgroundFetchInterval函數(shù)宴树,設(shè)置多長(zhǎng)時(shí)間喚醒一次程序。如果你不設(shè)置酒贬,將采取默認(rèn)的從不喚醒程序來(lái)執(zhí)行后臺(tái)獲取翠霍。
后臺(tái)通知:->消息推送
在一些有限的特殊的情況下,app可以在后臺(tái)運(yùn)行很長(zhǎng)的時(shí)間零如,比如:
1、在后臺(tái)播放音樂(lè)的app可以在任意長(zhǎng)的時(shí)間內(nèi)保持活動(dòng)狀態(tài)考蕾,直到用戶(hù)用另外一個(gè)app播放音樂(lè)開(kāi)始。
2蚯窥、在后臺(tái)跟蹤用戶(hù)位置的app可以運(yùn)行任意長(zhǎng)的時(shí)間塞帐。
3、還有什么網(wǎng)際協(xié)議電話(VoIP)app可以定期運(yùn)行壁榕,以向其服務(wù)器簽到,但除非正在進(jìn)行通話牌里,否則不允許不加限制的運(yùn)行。