Xcode中的iOS工程模板
iOS工程模板分为两类-Application和Framework & Library。
Application类型
Application包含5个模板,具体如下所示:
- Master-Detail Application:可以构建树形结构导航模式应用,生成的代码中包含了导航控制器和表视图控制器等。
- Page-Based Application:可以构建类似电子书效果的应用
- Single View Application:可以构建简单的单个视图应用
- Tabbed Application:可以构建标签导航模式的应用,生成的代码中包含了标签控制器和标签栏等。
- Game: 可以构建基于iOS的游戏应用
Framework & Library
- Cocoa Touch Framework 可以让开发者自定义应用于UIKit的框架
- Cocoa Touch Static Library 可以让开发者创建基于Foundation框架的静态库。
Xcode中的iOS工程目录
- AppDelegate.swift类文件:应用程序委托对象
- ViewController.swift类文件:是视图控制器类,在工程中扮演着根视图和用户事件控制类的角色
- Main.storyboard文件:故事板文件
- LaunchScreen.storyboard:应用启动界面故事板文件
- Assets.xcassets文件夹: 资源目录,可以用来管理图片
- Info.plist:工程属性文件
- Products组:工程将要生成的产品包
在访问资源文件时,文件夹和组是有区别的。访问文件夹中的资源时需要将文件夹作为路径。如果icon.png文件放在images文件夹下,则访问它的路径时images/icon.png,如果images是组,则访问它的路径是icon.png.
iOS应用生命周期
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通知。
点击Home键-应用退出场景
场景描述:应用出于运行状态(即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 API 简介
iOS的整体架构图参见图2-28,分为4层-Cocoa Touch层,Media层,Core Service层和Core OS层。
Cocoa Touch层
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层
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层
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层
Core OS层提供了一些低级功能,一般不直接使用它。
框架 | 前缀 | 说明 |
---|---|---|
Accelerate | AC | 访问重力加速计API |
Core Bluetooth | CB | 访问低功耗蓝牙设备API |
External Accessory | EA | 访问外围配件API接口 |
Generic Security Services | GSS | 提供一组安全相关的服务 |
Security | CSSM | 管理证书、公钥、私钥和安全信任策略的API |
LocalAuthentication | LA | 提供用户指定的安全策略进行安全认证 |