iOS工程模板分爲兩類-Application和Framework & Library。swift
Application包含5個模板,具體以下所示:安全
Master-Detail Application:能夠構建樹形結構導航模式應用,生成的代碼中包含了導航控制器和表視圖控制器等。網絡
Page-Based Application:能夠構建相似電子書效果的應用架構
Single View Application:能夠構建簡單的單個視圖應用併發
Tabbed Application:能夠構建標籤導航模式的應用,生成的代碼中包含了標籤控制器和標籤欄等。app
Game: 能夠構建基於iOS的遊戲應用框架
Cocoa Touch Framework 可讓開發者自定義應用於UIKit的框架ide
Cocoa Touch Static Library 可讓開發者建立基於Foundation框架的靜態庫。字體
AppDelegate.swift類文件:應用程序委託對象動畫
ViewController.swift類文件:是視圖控制器類,在工程中扮演着根視圖和用戶事件控制類的角色
Main.storyboard文件:故事板文件
LaunchScreen.storyboard:應用啓動界面故事板文件
Assets.xcassets文件夾: 資源目錄,能夠用來管理圖片
Info.plist:工程屬性文件
Products組:工程將要生成的產品包
在訪問資源文件時,文件夾和組是有區別的。訪問文件夾中的資源時須要將文件夾做爲路徑。若是icon.png文件放在images文件夾下,則訪問它的路徑時images/icon.png,若是images是組,則訪問它的路徑是icon.png.
AppDelegate類在應用生命週期的不一樣階段會回調不一樣的方法。首先介紹iOS應用的5中狀態。
Not Running(非運行狀態):應用沒有運行或被系統終止
Inactive(前臺非活動狀態):應用正在進入前臺狀態,可是還不能接受事件處理
Active(前臺活動狀態):應用進入前臺狀態,能接受事件處理
Backgroud(後臺狀態):應用進入後臺狀態,依然可以執行代碼。若是有可執行的代碼,就會執行代碼;若是沒有可執行的代碼或者將可執行的代碼執行完畢,應用會立刻進入掛起狀態
Suspend(掛起狀態):被掛起的應用不能執行代碼。若是系統內存不夠,應用會被終止。
在應用狀態切換的過程當中,iOS系統會回調AppDelegate中的一些方法,而且發送一些通知。下面介紹幾個主要的方法和通知。
方法 | 本地通知 | 說明 |
---|---|---|
application:didFinishLaunchingWithOptions | UIApllicationDidFinishedLaunchingNotification | 應用啓動並進行初始化時會調用該方法併發出通知。這個階段會實例化根視圖控制器 |
applicationDidBecomeActive | UIApplicationDidBecomeActiveNotification | 應用進入前臺並處於活動狀態時調用該方法併發出通知。這個階段能夠恢復UI的狀態 |
applicationWillResignActive | UIApplicationWillResignActiveNotification | 應用從活動狀態進入到非活動狀態時調用該方法併發出通知。這個階段能夠保存UI狀態 |
applicationDidEnterBackgroud | UIApplicationDidEnterBackgroudNotification | 應用進入後臺時調用該方法併發出通知。這個階段能夠保存用戶數據,釋放一些資源 |
applicationWillEnterForegroud | UIApplicationWillEnterForegroudNotification | 應用進入到前臺,可是尚未處於活動狀態時調用該方法併發出通知。這個階段能夠恢復用戶數據 |
applicationWillTerminate | UIApplicationWillTerminateNotification | 應用被終止時調用該方法併發出通知,但內存清除時除外,這個階段釋放一些資源,也能夠保存用戶數據 |
場景描述:用戶點擊應用圖標時,多是第一次啓動這個應用,也多是應用終止後再次啓動。該場景的狀態躍遷過程共經歷兩個階段單個狀態:Not running -> Inactive -> Active。
Not running -> Inactive階段:調用application:didFinishLaunchingWithOptions方法,發出UIApllicationDidFinishedLaunchingNotification通知。
Inactive -> Active階段:調用applicationDidBecomeActive方法,發出UIApplicationDidBecomeActiveNotification通知。
場景描述:應用出於運行狀態(即Active狀態)時點擊Home鍵應用會退出。該場景的狀態變遷過程分爲兩種狀況:能夠在後臺運行或者掛起和不能夠在後臺運行或掛起,能夠根據工程屬性文件Info.plist中的屬性Application does not run in background來控制這兩種狀態。
該場景的狀態變遷共經歷3個階段4個狀態:Activie -> Inactive -> Backgroud -> Suspend。
Activie -> Inactive階段:調用applicationWillResignActive方法,發出UIApplicationWillResignActiveNotification通知。
Inactive -> Backgroud階段:應用從非活動狀態進入到後臺(不涉及重點的方法和通知)。
Backgroud -> Suspend階段:調用applicationDidEnterBackground方法,發出UIApplicationDidEnterBackgroudNotification通知。
該場景下的狀態變遷共經歷4個階段5種狀態:Activie -> Inactive -> Backgroud -> Suspend -> Not Running。
Activie -> Inactive階段:調用applicationWillResignActive方法,發出UIApplicationWillResignActiveNotification通知。
Inactive -> Backgroud階段:應用從非活動狀態進入到後臺(不涉及重點的方法和通知)
Backgroud -> Suspend階段:調用applicationDidEnterBackground方法,發出UIApplicationDidEnterBackgroudNotification通知
Suspend -> Not Running階段:調用applicationWillTerminate方法,發出UIApplicationWillTerminateNotification通知。
場景描述:掛起狀態的應用從新運行。該場景的狀態變遷過程共經歷三個階段4種狀態:Suspend -> Backgroud -> Inactive -> Active。
Suspend -> Backgroud階段:應用從掛起狀態進入到後臺(不涉及重點的方法和通知)
Backgroud -> Inactive:調用applicationWillEnterForeground方法,發出UIApplicationWillEnterForegroudNotification通知。
Inactive -> Active:調用applicationDidBecomeActive方法,發出UIApplicationDidBecomeActiveNotification通知。
場景描述:應用在後臺處理完成時進入掛起狀態(這是一種休眠狀態),若是這時發出低內存警告,爲了知足其餘應用對內存的須要,該應用就會被清除內存從而終止運行。該場景的變遷過程爲:Backgroud -> Suspend -> Not running。
內存清除的時候應用終止運行。內存清除有兩種狀況,多是系統強制清楚內存,也多是由使用者從任務欄中手動清除。內存清除後若是應用再次運行,上一次的運行狀態不會被保存,相對於應用第一次運行。
在內存清除的場景下,應用不會調用任何方法,也不會發出任何通知。
iOS的總體架構圖參見圖2-28,分爲4層-Cocoa Touch層,Media層,Core Service層和Core OS層。
Cocoa Touch層提供了構建iOS應用的一些基本系統服務(如多任務、觸摸輸入和推送通知等)和關鍵框架。
框架 | 前綴 | 說明 |
---|---|---|
ConatactsUI | CN | 訪問通信錄相關UI類 |
EventKitUI | EK | 訪問日曆事件數據 |
GameKit | GK | 提供可以進行點對點通訊的網絡通訊API |
iAd | AD | 廣告API |
MapKit | MK | 地圖API |
MessageUI | MF | 電子郵件消息相關API |
PhotosUi | PF | 照片API |
TW | 提供發送Twitter API | |
UIKit | UK | 提供UI類 |
WatchKit | Wk | Apple Watch相關類 |
Media層提供了圖形、音頻、視頻和AirPlay技術等。
框架 | 前綴 | 說明 |
---|---|---|
Assets Library | Al | 訪問圖片和視頻的API |
AudioToolBox | Audio | 錄製或播放視頻、音頻流以及格式轉換 |
AudioUnit | Audio、AU | 使用內置音頻單元服務以及音頻處理模塊 |
AV Foundation | AV | 播放與錄製音頻和視頻的OC API |
Core Audio | Audio | 錄製、製做、播放音頻的C語言接口 |
Core Graphics | CG | 提供Quartz 2D接口 |
Core Image | CI | 操做視頻和靜態圖像的接口 |
Core MIDI | MIDI | 處理MIDI數據的底層API |
Core Text | CT | 渲染文本和處理字體的簡單、高效的C語言接口 |
Core Video | CV | 處理音頻和視頻的API |
Image I/O | CG | 讀寫圖像數據類 |
GLKit | GLK | 構建複雜OpenGL ES應用的OC應用類 |
Media Player | MP | 播放接口 |
OpenAl | AL | 包含了OpenAL(跨平臺)的C接口 |
OpenGL ES | GL | 包含OpenGL ES(跨平臺的2D/3D圖形庫)的C語言接口 |
Quartz Core | CA | 提供動畫接口類 |
Sprite Kit | SK | 蘋果提供的基於2D遊戲的開發引擎 |
Scene Kit | SCK | 一種高級別的3D圖像框架,能建立3D動畫場景和特效 |
Core Services層提供了CloudKit、HealthKit、HomeKit、SQLite和XML支持等技術
框架 | 前綴 | 說明 |
---|---|---|
Accounts | AC | 用於訪問用戶的Twitter帳戶 |
Contacts | CN | 訪問通信錄信息 |
AdSupport | AS | 得到iAd廣告標識 |
CFNetwork | CF | 提供了訪問Wi-Fi網絡和蜂窩移動網絡的API |
Core Data | NS | 提供管理應用數據的ORM接口 |
CoreFoundation | CF | 最基本的框架包括數據集 |
Core Location | CL | 定位服務的API |
CoreMedia | CM | 提供AV Foundation框架使用的底層媒體類型,能夠精確控制音頻或視頻的建立及展現 |
CoreMotion | CM | 接收和處理重力加速度以及其餘的運動操做 |
CoreTelephony | CT | 提供訪問電話基本信息的API |
Event Kit | EK | 訪問日曆事件數據 |
Foundation | NS | 是OC最基本的框架 |
JavaScriptCore.framework | JS | 實現OC與JS的相互調用 |
MobileCoreServices | UT | 定義統一標識符類型(UIT)使用的底層類型 |
Newsstand Kit | NK | 提供在後臺下載雜誌和新聞的API接口 |
Pass Kit | PK | 提供訪問優惠券的API |
QuickLock | QL | 提供預覽沒法直接查看的文件內容 |
Social | SL | 提供社交網絡訪問API,中國區提供新浪微博的API |
Store Kit | SK | 提供處理應用內置收費的資金交易 |
SystemConfiguration | SC | 用於肯定設備的網絡配置,也能夠用於判斷某個主機服務是否可使用 |
Cloud Kit | CK | 開發iCloud應用的API |
Health Kit | HK | 開發健康和健身等服務的API |
Home Kit | HM | 可以與用戶家中鏈接的設備通訊並進行控制 |
Core OS層提供了一些低級功能,通常不直接使用它。
框架 | 前綴 | 說明 |
---|---|---|
Accelerate | AC | 訪問重力加速計API |
Core Bluetooth | CB | 訪問低功耗藍牙設備API |
External Accessory | EA | 訪問外圍配件API接口 |
Generic Security Services | GSS | 提供一組安全相關的服務 |
Security | CSSM | 管理證書、公鑰、私鑰和安全信任策略的API |
LocalAuthentication | LA | 提供用戶指定的安全策略進行安全認證 |