響應(yīng)應(yīng)用的啟動(dòng)

【譯】為避免撕逼,提前聲明:本文純屬翻譯,僅僅是為了學(xué)習(xí),加上水平有限,見(jiàn)諒!

初始化應(yīng)用并準(zhǔn)備運(yùn)行

概述

UIKit做的大部分工作實(shí)際上是啟動(dòng)應(yīng)用并準(zhǔn)備運(yùn)行。UIKit創(chuàng)建UIApplication對(duì)象用來(lái)管理應(yīng)用,加載初始視圖和視圖控制器并開(kāi)始應(yīng)用主事件循環(huán)。UIKit也會(huì)創(chuàng)建應(yīng)用委托——一個(gè)遵守UIApplicationDelegate協(xié)議的對(duì)象。新Xcode工程包含你可以自定義并用來(lái)處理特定啟動(dòng)任務(wù)的應(yīng)用委托對(duì)象。在啟動(dòng)時(shí)使用這個(gè)對(duì)象執(zhí)行下面的一些或所有任務(wù):

  • 當(dāng)應(yīng)用第一次啟動(dòng)時(shí),執(zhí)行所需要的任何一次性設(shè)置。

  • 初始化應(yīng)用數(shù)據(jù)結(jié)構(gòu)。

  • 配置UI的視圖和視圖控制器。

  • 驗(yàn)證應(yīng)用內(nèi)容。

  • 啟動(dòng)應(yīng)用任何需要運(yùn)行的任務(wù)。例如,連接你需要的網(wǎng)絡(luò)資源。

應(yīng)用委托中有兩個(gè)方法(如列表1所示)只在啟動(dòng)的時(shí)候調(diào)用。使用application:willFinishLaunchingWithOption:方法初始化應(yīng)用數(shù)據(jù)結(jié)構(gòu)并執(zhí)行一次性設(shè)置任務(wù)。(這個(gè)方法調(diào)用的同時(shí),UIKit已經(jīng)從storyboard文件中加載了應(yīng)用的默認(rèn)用戶界面。)使用application:didFinishLaunchingWithOption:方法去驗(yàn)證內(nèi)容,更新用戶默認(rèn)的用戶界面,并且可以啟動(dòng)任意任務(wù)。

列表1


class AppDelegate: UIResponder, UIApplicationDelegate {

var window: UIWindow?

func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]? = nil) -> Boll {

// Override point for customization after app launch,

// but before state restoration

return true

}

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

// Override point for app customization

// Perform final customization of your user interface.

}

}

應(yīng)用的用戶界面任然保持隱藏狀態(tài),直到兩個(gè)初始化方法把控制權(quán)返回給UIKit。僅當(dāng)應(yīng)用無(wú)法正常運(yùn)行的時(shí)才會(huì)同步的執(zhí)行任務(wù)。例如,你必須同步的配置用戶界面。在后臺(tái)調(diào)度隊(duì)列異步的啟動(dòng)其他的所有任務(wù)。特別的,在后臺(tái)開(kāi)始所有的網(wǎng)絡(luò)請(qǐng)求,并在獲取數(shù)據(jù)時(shí)讓用戶執(zhí)行其他任務(wù)。

確定應(yīng)用啟動(dòng)的原因

用戶可以通過(guò)點(diǎn)擊主屏上的圖標(biāo)來(lái)啟動(dòng)應(yīng)用,系統(tǒng)還可以通過(guò)響應(yīng)特定的事件啟動(dòng)應(yīng)用。當(dāng)系統(tǒng)啟動(dòng)應(yīng)用時(shí),它會(huì)在application:willFinishLaunchingWithOptions:和application:didFinishLaunchingWithOptions:方法傳遞的字典對(duì)象中提供啟動(dòng)原因。

使用在啟動(dòng)選項(xiàng)字典中的鍵去了解應(yīng)用啟動(dòng)的原因并提供適當(dāng)?shù)捻憫?yīng)。字典可能只包含在那存在的鍵。例如,如果應(yīng)用在后臺(tái)處理位置更新,當(dāng)新位置事件可用的時(shí)候,字典就會(huì)包含UIApplicationLaunchOptionsLocationKey鍵。列表2展示了如何查找這個(gè)鍵,配置位置管理對(duì)象并啟動(dòng)位置服務(wù),這會(huì)向位置管理委托發(fā)送一個(gè)事件。

列表2


class Application: UIResponder, UIApplicationDelegate, CLLocationManagerDelegate {

let locationManager = CLLocationManager()

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

// if launched because of new location data,

// start the visits service right away.

if let keys = launchOptions?.keys {

if keys.contains(.location) {

locationManager.delegate = self

locationManager.startMonitoringVisits()

}

}

return true

}

// other methods...

}

啟動(dòng)選項(xiàng)鍵值列表和關(guān)于如何處理它們的信息,請(qǐng)看UIApplicationLaunchOptionsKey

話題

啟動(dòng)時(shí)間

關(guān)于應(yīng)用的啟動(dòng)順序

了解自定義代碼在啟動(dòng)時(shí)的執(zhí)行順序。

執(zhí)行應(yīng)用的一次性設(shè)置

保證應(yīng)用環(huán)境可以正常的配置。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容