【譯】為避免撕逼俗慈,提前聲明:本文純屬翻譯扮惦,僅僅是為了學(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)境可以正常的配置吮廉。