《iOS開發指南:從Hello World到App Store上架》第4版是2016年人民郵電出版社出版的圖書,作者關東升。
基本介紹
- 書名:《iOS開發指南:從Hello World到App Store上架》第4版
- 作者:關東升
- ISBN:9787115423184
- 頁數:802
- 定價:119
- 出版社:人民郵電出版社
- 出版時間:2016.6.1
- 裝幀:平裝
- 開本:800×1230
內容簡介,作者簡介,目錄,
內容簡介
本書是iOS開發傑出指南,分5部分講解如何從零起步編寫並上線iOS套用。首部分介紹iOS開發基礎知識,包括界面構建技術、基本控制項、協定、表視圖、螢幕適配、導航、分屏多任務等。第二部分介紹設計與架構的相關知識,包括設計模式、分層模式、本地數據持久化等。第三部分為進階篇,包括設定與配置、本地化、Contacts與ContactsUI框架、數據交換格式、Web Service、定位服務、蘋果地圖等內容。第四部分介紹測試、調試和最佳化等相關知識。第五部分為實戰篇,涵蓋代碼版本管理、項目依賴管理、App Store發布流程,以及兩個真實iOS套用的分析設計、編程、測試與分布過程。本書同時提供Swift和Objective-C兩版代碼。
本書適合所有iOS開發人員學習參考。
本書適合所有iOS開發人員學習參考。
作者簡介
國內傑出iOS和Cocos技術作家、iOS技術顧問、Cocos有價值專家(CVP)、智捷課堂首席培訓專家、51CTO社區iOS技術顧問。他精通iOS、Android和Windows及HTML5等移動開發技術,擅長套用和遊戲類項目開發,曾先後主持開發:大型網路遊戲《神農訣》的iOS和Android客戶端,國家農產品追溯系統的iPad客戶端,酒店預訂系統的iOS客戶端,金融系統的iOS、Windows及Android客戶端。與此同時,他長期為中國移動研究院、方正科技、大唐電信、中國石油、工商銀行、南方航空、惠普、東軟集團、NTT等企事業單位提供技術諮詢及員工培訓。
目錄
1 開篇綜述
2 第一個iOS應用程式
2.1 創建HelloWorld工程
2.1.1 創建工程
2.1.2 Xcode中的iOS工程模板
2.2 套用生命周期
2.2.1 非運行狀態——套用啟動場景
2.2.2 點擊Home鍵——套用退出場景
2.2.3 掛起重新運行場景
2.2.4 記憶體清除——套用終止場景
2.3 設定產品屬性
2.3.1 Xcode中的PROJECT和TARGET
2.3.2 設定常用的產品屬性
2.4 iOS API簡介
2.4.1 API概述
2.4.2 如何使用API幫助
3 Cocoa Touch框架與構建套用界面
3.1 視圖控制器
3.1.1 視圖控制器的種類
3.1.2 視圖生命周期
3.2 視圖
3.2.1 UIView層次結構
3.2.2 視圖分類
3.2.3 套用界面構建層次
3.3 使用故事板構建界面
3.3.1 什麼是故事板?
3.3.2 場景(Scene)和過渡(Segue)
3.4 使用Xib檔案構建界面
3.4.1 重構HelloWorld
3.4.2 Xib與故事板比較
3.5 使用純代碼構建界面
3.5.1 重構HelloWorld
3.5.2 視圖幾個重要屬性
3.6 三種構建界面技術討論
3.6.1 所見即所得
3.6.2 原型驅動開發
3.6.3 團隊協同開發
4 UIView與視圖
4.1 標籤與按鈕
4.1.1 標籤控制項
4.1.2 按鈕控制項
4.2 事件處理
4.2.1 定義動作
4.3 訪問視圖
4.3.1 輸出口
4.4 TextField和TextView
4.4.1 TextField控制項
4.4.2 TextView控制項
4.4.3 鍵盤的打開和關閉
4.4.4 關閉和打開鍵盤的通知
4.4.5 鍵盤的種類
4.5 開關控制項、滑塊控制項和分段控制項
4.5.1 開關控制項
4.5.2 滑塊控制項
4.5.3 分段控制項
4.6 網頁視圖WebView
4.6.1 UIWebView類
4.6.2 WKWebView類
4.7 等待相關的控制項與進度條
4.7.1 活動指示器ActivityIndicatorView
4.7.2 進度條ProgressView
4.8 警告框和操作表
4.8.1 警告框
4.8.2 操作表ActionSheet
4.8.3 使用iOS 8 UIAlertController實現
4.9 工具列和導航欄
4.9.1 工具列
4.9.2 導航欄
5 委託協定、數據源協定與高級視圖
5.1 視圖中的委託協定和數據源協定
5.2 選擇器
5.2.1 日期選擇器
5.2.2 普通選擇器
5.2.3 數據源協定與委託協定
5.3 集合視圖
5.4 實例:Interface Builder實現奧運會比賽項目
5.4.1 添加集合視圖
5.4.2 添加集合視圖單元格
5.4.3 數據源協定與委託協定
5.5 實例:代碼實現奧運會比賽項目
5.5.1 添加集合視圖
5.5.2 自定義集合視圖單元格
6 表視圖
6.1 概述
6.1.1 表視圖的組成
6.1.2 表視圖的相關類
6.1.3 表視圖分類
6.1.4 單元格的組成和樣式
6.1.5 數據源協定與委託協定
6.2 簡單表視圖
6.2.1 創建簡單表視圖
6.2.2 自定義單元格
6.2.3 添加搜尋欄
6.3 分節表視圖
6.3.1 添加索引
6.3.2 分組
6.4 靜態表與控制界面布局
6.5 修改單元格
6.5.1 刪除和插入單元格
6.5.2 移動單元格
6.6 表視圖UI設計模式
6.6.1 分頁模式
6.6.2 下拉刷新模式
6.6.3 下拉刷新控制項
7 界面布局與螢幕適配
7.1 界面布局概述
7.2 iOS界面布局設計模式
7.2.1 表單布局模式
7.2.2 列表布局模式
7.2.3 格線布局模式
7.3 格線布局模式
7.4 Auto Layout布局
7.4.1 在Interface Builder中管理Auto Layout約束
7.4.2 實例:Auto Layout布局
7.5 iOS 9 堆疊視圖StackView
7.5.1 堆疊視圖與布局
7.5.2 實例:堆疊視圖布局
7.6 iOS螢幕的多樣性
7.6.1 iOS螢幕介紹
7.6.2 iOS的三種解析度
7.6.3 獲得iOS設備螢幕信息
7.7 Size Class與iOS 8多螢幕適配
7.7.1 在Interface Builder中使用Size Class
7.7.2 Size Class的九宮格
7.7.3 實例:使用Size Class
7.8 資源目錄(Asset catalog)與圖片資源適配
8 視圖控制器與導航模式
8.1 概述
8.1.1 視圖控制器的種類
8.1.2 導航模式
8.2 模態視圖
8.2.1 Interface Builder實現
8.2.2 代碼實現
8.3 平鋪導航
8.3.1 套用場景
8.3.2 基於分屏導航的實現
8.3.3 基於電子書導航的實現
8.4 標籤導航
8.4.1 套用場景
8.4.2 Interface Builder實現
8.4.3 代碼實現
8.5 樹形結構導航(麵包屑導航)
8.5.1 套用場景
8.5.2 Interface Builder實現
8.5.3 代碼實現
8.6 組合使用導航
8.6.1 套用場景
8.6.2 Interface Builder實現
8.6.3 代碼實現
9 iPad套用開發
9.1 iPhone與iPad套用開發的差異
9.1.1 套用場景不同
9.1.2 導航模式不同
9.1.3 API不同
9.2 iPad樹形結構導航
9.2.1 郵件套用中的樹形結構導航
9.2.2 Master-Detail應用程式模板
9.2.3 Interface Builder實現SplitViewSample案例
9.2.4 代碼實現SplitViewSample案例
9.3 iPad模態視圖
9.3.1 郵件套用中的模態導航
9.3.2 iPad模態導航相關API
9.3.3 Interface Builder實現ModalViewSample案例
9.3.4 代碼實現ModalViewSample案例
9.4 Popover(浮動層)視圖
9.4.1 Popover相關API
9.4.2 PopoverViewSample案例
9.5 iOS 9分屏多任務
9.5.1 Slide Over多任務
9.5.2 分屏視圖多任務
9.5.3 畫中畫多任務
9.6 iPad分屏多任務適配開發
9.6.1 分屏多任務前提條件
9.6.2 分屏多任務適配
10 iOS常用設計模式
10.1 單例模式
10.1.1 問題提出
10.1.2 Objective-C實現原理
10.1.3 Swift實現原理
10.1.4 套用案例
10.2 委託模式
10.2.1 問題提出
10.2.2 實現原理
10.2.3 套用案例
10.3 委託模式
10.3.1 問題提出
10.3.2 實現原理
10.3.3 通知機制和KVO機制
10.4 再談MVC模式
10.4.1 MVC模式概述
10.4.2 Cocoa Touch中的MVC模式
11 iOS分層架構設計
11.1 低耦合企業級系統架構設計
11.2 iOS分層架構設計
11.3 實例:MyNotes套用
11.4 基於同一工程的分層
11.4.1 採用純Swift語言實現——PSSS模式
11.4.2 採用純Objective-C語言實現——POOO模式
11.4.3 採用Swift與Objective-C混合搭配實現——PSOO模式
11.5 基於同一工作空間靜態程式庫實現的WLSOO模式
11.5.1 使用工作空間
11.5.2 添加數據持久層工程
11.5.3 建立業務邏輯層與數據持久層的依賴關係
11.5.4 建立表示層與業務邏輯層的依賴關係
11.6 基於同一工作空間框架實現的WFSSS模式
11.6.1 設定Public頭檔案
11.6.2 建立表示層與業務邏輯層的依賴關係
11.6.3 代碼重構
11.7 基於同一工作空間框架實現的WFOOO模式
11.7.1 設定Public頭檔案
11.7.2 設定保護傘頭檔案
11.7.3 代碼重構
11.8 基於同一工作空間框架實現的WFSOO模式
11.8.1 設定Public頭檔案
11.8.2 設定保護傘頭檔案
11.8.3 建立表示層與業務邏輯層的依賴關係
11.8.4 代碼重構
11.9 基於同一工作空間框架實現的WFOSS模式
11.9.1 設定Public頭檔案
11.9.2 設定Swift代碼嵌入套用
11.9.3 代碼重構
11.10 基於同一個工程不同目標框架實現的TFSOO模式
11.10.1 使用目標
11.10.2 添加框架目標
12 數據持久化
12.1 概述
12.1.1 沙箱目錄
12.1.2 持久化方式
12.2 屬性列表
12.3 對象歸檔
12.4 使用SQLite資料庫
12.4.1 SQLite數據類型
12.4.2 創建資料庫
12.4.3 查詢數據
12.4.4 修改數據
12.5 Core Data
12.5.1 ORM
12.5.2 Core Data堆疊
12.5.3 建模和生成實體
12.5.4 採用Core Data分層架構設計
12.5.5 查詢數據
12.5.6 修改數據
13 應用程式設定
13.1 概述
13.1.1 設定
13.1.2 配置
13.2 應用程式設定包
13.3 設定項目種類
13.3.1 文本欄位
13.3.2 開關
13.3.3 滑塊
13.3.4 值列表
13.3.5 子界面
13.4 讀取設定
14 本地化
14.1 概述
14.1.1 需要本地化的內容
14.1.2 本地化目錄結構
14.2 文本信息本地化
14.2.1 系統按鈕和信息本地化
14.2.2 套用名稱本地化
14.2.3 程式代碼輸出的靜態文本本地化
14.2.4 使用genstring工具
14.3 xib和故事板檔案本地化
14.3.1 使用Base本地化技術
14.3.2 Auto Layout與本地化
14.4 資源檔案本地化
14.4.1 圖片資源檔案本地化
14.4.2 聲音資源檔案本地化
15 iOS 9中訪問通訊錄
15.1 通訊錄的安全訪問設定
15.2 使用Contacts框架讀取聯繫人信息
15.2.1 查詢聯繫人記錄
15.2.2 讀取單值屬性
15.2.3 讀取多值屬性
15.2.4 讀取圖片屬性
15.3 使用Contacts框架寫入聯繫人信息
15.3.1 創建聯繫人
15.3.2 修改聯繫人
15.3.3 刪除聯繫人
15.4 使用系統提供界面
15.4.1 選擇聯繫人
15.4.2 顯示和修改聯繫人
15.4.3 創建聯繫人
16 數據交換格式
16.1 XML數據交換格式
16.1.1 解析XML文檔
16.1.2 XML文檔結構
16.2 實例:MyNotes套用XML
16.2.1 使用NSXML解析
16.2.2 使用TBXML解析
16.3 JSON數據交換格式
16.3.1 JSON文檔結構
16.3.2 JSON數據解碼
16.4 實例:MyNotes套用JSON解碼
17 REST風格Web Service
17.1 概述
17.1.1 HTTP和HTTPS協定
17.2 使用NSURLSession
17.2.1 NSURLSession API
17.2.2 簡單會話實現GET請求
17.2.3 默認會話實現GET請求
17.2.4 實現POST請求
17.2.5 下載數據
17.3 實例:使用NSURLSession重構MyNotes案例
17.3.1 插入方法調用
17.3.2 修改方法調用
17.3.3 刪除方法調用
17.4 使用AFNetworking框架
17.4.1 ASIHTTPRequest、AFNetworking和MKNetworkKit比較
17.4.2 安裝和配置AFNetworking框架
17.4.3 實現GET請求
17.4.4 實現POST請求
17.4.5 下載數據
17.4.6 上傳數據
17.5 使用為Swift設計的網路框架——Alamofire
17.5.1 安裝和配置Alamofire框架
17.5.2 上傳數據
17.5.3 下載數據
17.5.4 實現POST請求
17.5.5 實現GET請求
17.6 反饋網路信息改善用戶體驗
17.6.1 使用下拉刷新控制項改善用戶體驗
17.6.2 使用活動指示器控制項
17.6.3 使用網路活動指示器
18 定位服務
18.1 定位服務概述
18.1.1 定位服務編程
18.1.2 測試定位服務
18.2 管理定位服務
18.2.1 套用啟動與停止下的定位服務管理
18.2.2 視圖轉換時的定位服務管理
18.2.3 套用前後台切換時的定位服務管理
18.2.4 設定自動暫停位置服務
18.2.5 iOS 9後台位置服務管理
18.3 地理信息反編碼
18.3.1 地理信息編碼與反編碼
18.3.2 實例:地理信息反編碼
18.3.3 地理信息編碼查詢
18.3.4 實例:地理信息編碼查詢
18.4 微定位技術iBeacon
18.4.1 微定位與地理圍欄
18.4.2 iBeacon技術概述
18.4.3 實例:iBeacon技術實現微定位
19 蘋果地圖套用
19.1 使用iOS蘋果地圖
19.1.1 顯示地圖
19.1.2 3D地圖
19.2 添加標註
19.2.1 實現查詢
19.2.2 在地圖上添加標註
19.3 跟蹤用戶位置變化
19.4 使用程式外地圖
20 找出程式中的bug——調試
20.1 Xcode調試工具
20.1.1 定位編譯錯誤
20.1.2 查看和顯示日誌
20.1.3 設定和查看斷點
20.1.4 調試工具
20.1.5 輸出視窗
20.1.6 變數查看視窗
20.1.7 查看執行緒
20.2 日誌與斷言輸出
20.2.1 使用NSLog函式
20.2.2 使用斷言
20.3 異常堆疊報告分析
20.3.1 跟蹤異常堆疊
20.3.2 分析堆疊報告
20.4 在iOS設備上調試
20.4.1 創建開發者證書
20.4.2 設備註冊
20.4.3 創建App ID
20.4.4 創建配置概要檔案
20.4.5 設備調試
20.5 Xcode設備管理工具
20.5.1 查看設備上的應用程式
20.5.2 設備日誌
21 iOS測試驅動與單元測試
21.1 測試驅動的軟體開發概述
21.1.1 測試驅動的軟體開發流程
21.1.2 測試驅動的軟體開發案例
21.1.3 iOS單元測試框架
21.2 使用XCTest測試框架
21.2.1 添加XCTest到工程
21.2.2 編寫XCTest測試方法
21.2.3 運行測試程式
21.2.4 分析測試報告
21.3 異步單元測試
21.4 性能測試
21.4.1 配置測試環境
21.4.2 測試代碼
21.4.3 分析測試結果
21.5 iOS單元測試最佳實踐
21.5.1 測試數據持久層
21.5.2 測試業務邏輯層
21.5.3 測試表示層
22 iOS套用UI 測試
22.1 UI測試概述
22.2 添加UI測試到工程
22.2.1 創建工程時添加UI測試框架
22.2.2 在現有工程中添加UI測試用例目標
22.3 錄製腳本
22.3.1 錄製之前的準備
22.3.2 錄製過程
22.3.3 修改錄製腳本
22.4 訪問UI元素
22.4.1 UI元素層次樹
22.4.2 UI測試中相關API
22.5 表示層測試最佳實踐
22.5.1 配置UI測試用例目標
22.5.2 設定輔助功能
22.5.3 編寫UI測試用例
23 讓你的程式“飛”起來——性能最佳化
23.1 記憶體最佳化
23.1.1 記憶體管理
23.1.2 使用Analyze和Instruments工具解決記憶體泄漏問題
23.1.3 查找和解決殭屍對象
23.1.4 autorelease的使用問題
23.1.5 回響記憶體警告
23.2 最佳化資源檔案
23.2.1 圖片檔案最佳化
23.2.2 音頻檔案最佳化
23.3 延遲載入
23.3.1 資源檔案的延遲載入
23.3.2 故事板檔案的延遲載入
23.3.3 xib檔案的延遲載入
23.4 數據持久化的最佳化
23.4.1 使用檔案
23.4.2 使用SQLite資料庫
23.4.3 使用Core Data
23.5 可重用對象的使用
23.5.1 表視圖中的可重用對象
23.5.2 集合視圖中的可重用對象
23.5.3 地圖視圖中的可重用對象
23.6 並發處理與多核CPU
23.6.1 主執行緒阻塞問題
23.6.2 選擇NSThread還是GCD
24 管理好你的程式代碼——代碼版本管理
24.1 概述
24.1.1 版本控制歷史
24.1.2 基本概念
24.2 Git代碼版本控制
24.2.1 伺服器搭建
24.2.2 Gitolite伺服器管理
24.2.3 Git常用命令
24.2.4 Git分支
24.2.5 Git協同開發
24.2.6 Xcode中Git的配置與使用
24.3 GitHub代碼託管服務
24.3.1 創建和配置GitHub賬號
24.3.2 創建代碼庫
24.3.3 刪除代碼庫
24.3.4 派生代碼庫
24.3.5 使用GitHub協同開發
24.3.6 管理組織
24.4 CocoaPods與Git管理
25 項目依賴管理
25.1 使用CocoaPods工具管理依賴
25.1.1 安裝CocoaPods
25.1.2搜尋庫
25.1.3 項目與第三方庫搭配形式
25.1.4 示例:靜態程式庫形式管理依賴
25.1.5 示例:框架形式管理依賴
25.2 使用Carthage工具管理依賴
25.2.1 安裝Carthage
25.2.2 項目與第三方庫搭配形式
25.2.3 使用Carthage工具管理依賴
25.2.4 Cartfile檔案
25.2.5 示例:重構MyNotes依賴關係
26 重構MyNotes套用——iOS網路通信中的設計模式與架構設計
26.1 行動網路通信套用的分層架構設計
26.2 Objective-C版本:在工作空間中添加和配置MKNetworkKit
26.3 基於委託模式實現
26.3.1 網路通信與委託模式
26.3.2 在異步網路通信中使用委託模式實現分層架構設計
26.3.3 類圖
26.3.4 時序圖
26.3.5 數據持久層重構
26.3.6 業務邏輯層的代碼實現
26.3.7 表示層的代碼實現
26.4 基於觀察者模式的通知機制實現
26.4.1 觀察者模式的通知機制回顧
26.4.2 異步網路通信中通知機制的分層架構設計
26.4.3 類圖
26.4.4 時序圖
26.4.5 數據持久層的重構
26.4.6 業務邏輯層的代碼實現
26.4.7 表示層的代碼實現
27 把你的套用放到App Store
27.1 收官
27.1.1 在Xcode 6中添加圖示
27.1.2 在Xcode 6中添加啟動界面
27.1.3 調整Identity和Deployment Info屬性
27.1.4 為發布進行編譯
27.2 發布流程
27.2.1 創建套用
27.2.2 基本信息輸入
27.2.3 套用定價
27.2.4 上傳套用
27.2.5 提交審核
27.3 常見審核不通過的原因
27.3.1 功能問題
27.3.2 用戶界面問題
27.3.3 商業問題
27.3.4 不當內容
27.3.5 其他問題
28 iOS敏捷開發項目實戰——2016里約熱內盧奧運會套用開發及App Store發布
28.1 套用分析與設計
28.1.1 套用概述
28.1.2 需求分析
28.1.3 原型設計
28.1.4 資料庫設計
28.1.5 架構設計
28.2 iOS敏捷開發
28.2.1 敏捷開發宣言
28.2.2 iOS適合敏捷開發?
28.2.3 iOS敏捷開發最佳實踐
28.3 任務1:創建套用工作空間和工程
28.3.1 疊代1.1:創建Swift版本的工程
28.3.2 疊代1.2:創建Objective-C版本
28.3.3 工作空間
28.3.4 疊代1.3:發布到GitHub
28.4 任務2:信息系統層與持久層開發
28.4.1 疊代2.1:編寫資料庫DDL腳本
28.4.2 疊代2.2:插入初始數據到
28.4.3 資料庫
28.4.4 疊代2.3:編寫實體類
28.4.5 疊代2.4:DAO類XCTest單元
28.4.6 測試
28.4.7 疊代2.5:資料庫幫助類
28.4.8 DBHelper
28.4.9 疊代2.5:編寫DAO類
28.4.10 疊代2.6:發布到GitHub
28.5 任務3:業務邏輯層開發
28.5.1 任務3:業務邏輯層開發
28.5.2 疊代3.1:對比賽項目業務邏輯
28.5.3 類進行XCTest單元測試
28.5.4 疊代3.2:編寫比賽項目業務
28.5.5 邏輯類
28.5.6 疊代3.3:對比賽日程業務邏輯
28.5.7 類進行XCTest單元測試
28.5.8 疊代3.4:編寫比賽日程業務
28.5.9 邏輯類
28.5.10 疊代3.5:發布到GitHub
28.6 任務4:表示層開發
28.6.1 疊代4.1:使用資源目錄管理
28.6.2 圖片和圖示資源
28.6.3 疊代4.2:根據原型設計初步
28.6.4 設計iPad故事板
28.6.5 疊代4.3:根據原型設計初步
28.6.6 設計iPhone故事板
28.6.7 疊代4.4:首頁模組
28.6.8 疊代4.5:比賽項目模組
28.6.9 疊代4.6:比賽日程模組
28.6.10 疊代4.7:倒計時模組表示層
28.6.11 疊代4.8:關於我們模組表示層
28.6.12 疊代4.9:發布到GitHub
28.7 任務5:收工
28.7.1 疊代5.1:添加圖示
28.7.2 疊代5.2:設計和添加啟動界面
28.7.3 疊代5.4:性能測試與改善
28.7.4 疊代5.5:發布到GitHub上
28.7.5 疊代5.6:在App Store上發布套用
2 第一個iOS應用程式
2.1 創建HelloWorld工程
2.1.1 創建工程
2.1.2 Xcode中的iOS工程模板
2.2 套用生命周期
2.2.1 非運行狀態——套用啟動場景
2.2.2 點擊Home鍵——套用退出場景
2.2.3 掛起重新運行場景
2.2.4 記憶體清除——套用終止場景
2.3 設定產品屬性
2.3.1 Xcode中的PROJECT和TARGET
2.3.2 設定常用的產品屬性
2.4 iOS API簡介
2.4.1 API概述
2.4.2 如何使用API幫助
3 Cocoa Touch框架與構建套用界面
3.1 視圖控制器
3.1.1 視圖控制器的種類
3.1.2 視圖生命周期
3.2 視圖
3.2.1 UIView層次結構
3.2.2 視圖分類
3.2.3 套用界面構建層次
3.3 使用故事板構建界面
3.3.1 什麼是故事板?
3.3.2 場景(Scene)和過渡(Segue)
3.4 使用Xib檔案構建界面
3.4.1 重構HelloWorld
3.4.2 Xib與故事板比較
3.5 使用純代碼構建界面
3.5.1 重構HelloWorld
3.5.2 視圖幾個重要屬性
3.6 三種構建界面技術討論
3.6.1 所見即所得
3.6.2 原型驅動開發
3.6.3 團隊協同開發
4 UIView與視圖
4.1 標籤與按鈕
4.1.1 標籤控制項
4.1.2 按鈕控制項
4.2 事件處理
4.2.1 定義動作
4.3 訪問視圖
4.3.1 輸出口
4.4 TextField和TextView
4.4.1 TextField控制項
4.4.2 TextView控制項
4.4.3 鍵盤的打開和關閉
4.4.4 關閉和打開鍵盤的通知
4.4.5 鍵盤的種類
4.5 開關控制項、滑塊控制項和分段控制項
4.5.1 開關控制項
4.5.2 滑塊控制項
4.5.3 分段控制項
4.6 網頁視圖WebView
4.6.1 UIWebView類
4.6.2 WKWebView類
4.7 等待相關的控制項與進度條
4.7.1 活動指示器ActivityIndicatorView
4.7.2 進度條ProgressView
4.8 警告框和操作表
4.8.1 警告框
4.8.2 操作表ActionSheet
4.8.3 使用iOS 8 UIAlertController實現
4.9 工具列和導航欄
4.9.1 工具列
4.9.2 導航欄
5 委託協定、數據源協定與高級視圖
5.1 視圖中的委託協定和數據源協定
5.2 選擇器
5.2.1 日期選擇器
5.2.2 普通選擇器
5.2.3 數據源協定與委託協定
5.3 集合視圖
5.4 實例:Interface Builder實現奧運會比賽項目
5.4.1 添加集合視圖
5.4.2 添加集合視圖單元格
5.4.3 數據源協定與委託協定
5.5 實例:代碼實現奧運會比賽項目
5.5.1 添加集合視圖
5.5.2 自定義集合視圖單元格
6 表視圖
6.1 概述
6.1.1 表視圖的組成
6.1.2 表視圖的相關類
6.1.3 表視圖分類
6.1.4 單元格的組成和樣式
6.1.5 數據源協定與委託協定
6.2 簡單表視圖
6.2.1 創建簡單表視圖
6.2.2 自定義單元格
6.2.3 添加搜尋欄
6.3 分節表視圖
6.3.1 添加索引
6.3.2 分組
6.4 靜態表與控制界面布局
6.5 修改單元格
6.5.1 刪除和插入單元格
6.5.2 移動單元格
6.6 表視圖UI設計模式
6.6.1 分頁模式
6.6.2 下拉刷新模式
6.6.3 下拉刷新控制項
7 界面布局與螢幕適配
7.1 界面布局概述
7.2 iOS界面布局設計模式
7.2.1 表單布局模式
7.2.2 列表布局模式
7.2.3 格線布局模式
7.3 格線布局模式
7.4 Auto Layout布局
7.4.1 在Interface Builder中管理Auto Layout約束
7.4.2 實例:Auto Layout布局
7.5 iOS 9 堆疊視圖StackView
7.5.1 堆疊視圖與布局
7.5.2 實例:堆疊視圖布局
7.6 iOS螢幕的多樣性
7.6.1 iOS螢幕介紹
7.6.2 iOS的三種解析度
7.6.3 獲得iOS設備螢幕信息
7.7 Size Class與iOS 8多螢幕適配
7.7.1 在Interface Builder中使用Size Class
7.7.2 Size Class的九宮格
7.7.3 實例:使用Size Class
7.8 資源目錄(Asset catalog)與圖片資源適配
8 視圖控制器與導航模式
8.1 概述
8.1.1 視圖控制器的種類
8.1.2 導航模式
8.2 模態視圖
8.2.1 Interface Builder實現
8.2.2 代碼實現
8.3 平鋪導航
8.3.1 套用場景
8.3.2 基於分屏導航的實現
8.3.3 基於電子書導航的實現
8.4 標籤導航
8.4.1 套用場景
8.4.2 Interface Builder實現
8.4.3 代碼實現
8.5 樹形結構導航(麵包屑導航)
8.5.1 套用場景
8.5.2 Interface Builder實現
8.5.3 代碼實現
8.6 組合使用導航
8.6.1 套用場景
8.6.2 Interface Builder實現
8.6.3 代碼實現
9 iPad套用開發
9.1 iPhone與iPad套用開發的差異
9.1.1 套用場景不同
9.1.2 導航模式不同
9.1.3 API不同
9.2 iPad樹形結構導航
9.2.1 郵件套用中的樹形結構導航
9.2.2 Master-Detail應用程式模板
9.2.3 Interface Builder實現SplitViewSample案例
9.2.4 代碼實現SplitViewSample案例
9.3 iPad模態視圖
9.3.1 郵件套用中的模態導航
9.3.2 iPad模態導航相關API
9.3.3 Interface Builder實現ModalViewSample案例
9.3.4 代碼實現ModalViewSample案例
9.4 Popover(浮動層)視圖
9.4.1 Popover相關API
9.4.2 PopoverViewSample案例
9.5 iOS 9分屏多任務
9.5.1 Slide Over多任務
9.5.2 分屏視圖多任務
9.5.3 畫中畫多任務
9.6 iPad分屏多任務適配開發
9.6.1 分屏多任務前提條件
9.6.2 分屏多任務適配
10 iOS常用設計模式
10.1 單例模式
10.1.1 問題提出
10.1.2 Objective-C實現原理
10.1.3 Swift實現原理
10.1.4 套用案例
10.2 委託模式
10.2.1 問題提出
10.2.2 實現原理
10.2.3 套用案例
10.3 委託模式
10.3.1 問題提出
10.3.2 實現原理
10.3.3 通知機制和KVO機制
10.4 再談MVC模式
10.4.1 MVC模式概述
10.4.2 Cocoa Touch中的MVC模式
11 iOS分層架構設計
11.1 低耦合企業級系統架構設計
11.2 iOS分層架構設計
11.3 實例:MyNotes套用
11.4 基於同一工程的分層
11.4.1 採用純Swift語言實現——PSSS模式
11.4.2 採用純Objective-C語言實現——POOO模式
11.4.3 採用Swift與Objective-C混合搭配實現——PSOO模式
11.5 基於同一工作空間靜態程式庫實現的WLSOO模式
11.5.1 使用工作空間
11.5.2 添加數據持久層工程
11.5.3 建立業務邏輯層與數據持久層的依賴關係
11.5.4 建立表示層與業務邏輯層的依賴關係
11.6 基於同一工作空間框架實現的WFSSS模式
11.6.1 設定Public頭檔案
11.6.2 建立表示層與業務邏輯層的依賴關係
11.6.3 代碼重構
11.7 基於同一工作空間框架實現的WFOOO模式
11.7.1 設定Public頭檔案
11.7.2 設定保護傘頭檔案
11.7.3 代碼重構
11.8 基於同一工作空間框架實現的WFSOO模式
11.8.1 設定Public頭檔案
11.8.2 設定保護傘頭檔案
11.8.3 建立表示層與業務邏輯層的依賴關係
11.8.4 代碼重構
11.9 基於同一工作空間框架實現的WFOSS模式
11.9.1 設定Public頭檔案
11.9.2 設定Swift代碼嵌入套用
11.9.3 代碼重構
11.10 基於同一個工程不同目標框架實現的TFSOO模式
11.10.1 使用目標
11.10.2 添加框架目標
12 數據持久化
12.1 概述
12.1.1 沙箱目錄
12.1.2 持久化方式
12.2 屬性列表
12.3 對象歸檔
12.4 使用SQLite資料庫
12.4.1 SQLite數據類型
12.4.2 創建資料庫
12.4.3 查詢數據
12.4.4 修改數據
12.5 Core Data
12.5.1 ORM
12.5.2 Core Data堆疊
12.5.3 建模和生成實體
12.5.4 採用Core Data分層架構設計
12.5.5 查詢數據
12.5.6 修改數據
13 應用程式設定
13.1 概述
13.1.1 設定
13.1.2 配置
13.2 應用程式設定包
13.3 設定項目種類
13.3.1 文本欄位
13.3.2 開關
13.3.3 滑塊
13.3.4 值列表
13.3.5 子界面
13.4 讀取設定
14 本地化
14.1 概述
14.1.1 需要本地化的內容
14.1.2 本地化目錄結構
14.2 文本信息本地化
14.2.1 系統按鈕和信息本地化
14.2.2 套用名稱本地化
14.2.3 程式代碼輸出的靜態文本本地化
14.2.4 使用genstring工具
14.3 xib和故事板檔案本地化
14.3.1 使用Base本地化技術
14.3.2 Auto Layout與本地化
14.4 資源檔案本地化
14.4.1 圖片資源檔案本地化
14.4.2 聲音資源檔案本地化
15 iOS 9中訪問通訊錄
15.1 通訊錄的安全訪問設定
15.2 使用Contacts框架讀取聯繫人信息
15.2.1 查詢聯繫人記錄
15.2.2 讀取單值屬性
15.2.3 讀取多值屬性
15.2.4 讀取圖片屬性
15.3 使用Contacts框架寫入聯繫人信息
15.3.1 創建聯繫人
15.3.2 修改聯繫人
15.3.3 刪除聯繫人
15.4 使用系統提供界面
15.4.1 選擇聯繫人
15.4.2 顯示和修改聯繫人
15.4.3 創建聯繫人
16 數據交換格式
16.1 XML數據交換格式
16.1.1 解析XML文檔
16.1.2 XML文檔結構
16.2 實例:MyNotes套用XML
16.2.1 使用NSXML解析
16.2.2 使用TBXML解析
16.3 JSON數據交換格式
16.3.1 JSON文檔結構
16.3.2 JSON數據解碼
16.4 實例:MyNotes套用JSON解碼
17 REST風格Web Service
17.1 概述
17.1.1 HTTP和HTTPS協定
17.2 使用NSURLSession
17.2.1 NSURLSession API
17.2.2 簡單會話實現GET請求
17.2.3 默認會話實現GET請求
17.2.4 實現POST請求
17.2.5 下載數據
17.3 實例:使用NSURLSession重構MyNotes案例
17.3.1 插入方法調用
17.3.2 修改方法調用
17.3.3 刪除方法調用
17.4 使用AFNetworking框架
17.4.1 ASIHTTPRequest、AFNetworking和MKNetworkKit比較
17.4.2 安裝和配置AFNetworking框架
17.4.3 實現GET請求
17.4.4 實現POST請求
17.4.5 下載數據
17.4.6 上傳數據
17.5 使用為Swift設計的網路框架——Alamofire
17.5.1 安裝和配置Alamofire框架
17.5.2 上傳數據
17.5.3 下載數據
17.5.4 實現POST請求
17.5.5 實現GET請求
17.6 反饋網路信息改善用戶體驗
17.6.1 使用下拉刷新控制項改善用戶體驗
17.6.2 使用活動指示器控制項
17.6.3 使用網路活動指示器
18 定位服務
18.1 定位服務概述
18.1.1 定位服務編程
18.1.2 測試定位服務
18.2 管理定位服務
18.2.1 套用啟動與停止下的定位服務管理
18.2.2 視圖轉換時的定位服務管理
18.2.3 套用前後台切換時的定位服務管理
18.2.4 設定自動暫停位置服務
18.2.5 iOS 9後台位置服務管理
18.3 地理信息反編碼
18.3.1 地理信息編碼與反編碼
18.3.2 實例:地理信息反編碼
18.3.3 地理信息編碼查詢
18.3.4 實例:地理信息編碼查詢
18.4 微定位技術iBeacon
18.4.1 微定位與地理圍欄
18.4.2 iBeacon技術概述
18.4.3 實例:iBeacon技術實現微定位
19 蘋果地圖套用
19.1 使用iOS蘋果地圖
19.1.1 顯示地圖
19.1.2 3D地圖
19.2 添加標註
19.2.1 實現查詢
19.2.2 在地圖上添加標註
19.3 跟蹤用戶位置變化
19.4 使用程式外地圖
20 找出程式中的bug——調試
20.1 Xcode調試工具
20.1.1 定位編譯錯誤
20.1.2 查看和顯示日誌
20.1.3 設定和查看斷點
20.1.4 調試工具
20.1.5 輸出視窗
20.1.6 變數查看視窗
20.1.7 查看執行緒
20.2 日誌與斷言輸出
20.2.1 使用NSLog函式
20.2.2 使用斷言
20.3 異常堆疊報告分析
20.3.1 跟蹤異常堆疊
20.3.2 分析堆疊報告
20.4 在iOS設備上調試
20.4.1 創建開發者證書
20.4.2 設備註冊
20.4.3 創建App ID
20.4.4 創建配置概要檔案
20.4.5 設備調試
20.5 Xcode設備管理工具
20.5.1 查看設備上的應用程式
20.5.2 設備日誌
21 iOS測試驅動與單元測試
21.1 測試驅動的軟體開發概述
21.1.1 測試驅動的軟體開發流程
21.1.2 測試驅動的軟體開發案例
21.1.3 iOS單元測試框架
21.2 使用XCTest測試框架
21.2.1 添加XCTest到工程
21.2.2 編寫XCTest測試方法
21.2.3 運行測試程式
21.2.4 分析測試報告
21.3 異步單元測試
21.4 性能測試
21.4.1 配置測試環境
21.4.2 測試代碼
21.4.3 分析測試結果
21.5 iOS單元測試最佳實踐
21.5.1 測試數據持久層
21.5.2 測試業務邏輯層
21.5.3 測試表示層
22 iOS套用UI 測試
22.1 UI測試概述
22.2 添加UI測試到工程
22.2.1 創建工程時添加UI測試框架
22.2.2 在現有工程中添加UI測試用例目標
22.3 錄製腳本
22.3.1 錄製之前的準備
22.3.2 錄製過程
22.3.3 修改錄製腳本
22.4 訪問UI元素
22.4.1 UI元素層次樹
22.4.2 UI測試中相關API
22.5 表示層測試最佳實踐
22.5.1 配置UI測試用例目標
22.5.2 設定輔助功能
22.5.3 編寫UI測試用例
23 讓你的程式“飛”起來——性能最佳化
23.1 記憶體最佳化
23.1.1 記憶體管理
23.1.2 使用Analyze和Instruments工具解決記憶體泄漏問題
23.1.3 查找和解決殭屍對象
23.1.4 autorelease的使用問題
23.1.5 回響記憶體警告
23.2 最佳化資源檔案
23.2.1 圖片檔案最佳化
23.2.2 音頻檔案最佳化
23.3 延遲載入
23.3.1 資源檔案的延遲載入
23.3.2 故事板檔案的延遲載入
23.3.3 xib檔案的延遲載入
23.4 數據持久化的最佳化
23.4.1 使用檔案
23.4.2 使用SQLite資料庫
23.4.3 使用Core Data
23.5 可重用對象的使用
23.5.1 表視圖中的可重用對象
23.5.2 集合視圖中的可重用對象
23.5.3 地圖視圖中的可重用對象
23.6 並發處理與多核CPU
23.6.1 主執行緒阻塞問題
23.6.2 選擇NSThread還是GCD
24 管理好你的程式代碼——代碼版本管理
24.1 概述
24.1.1 版本控制歷史
24.1.2 基本概念
24.2 Git代碼版本控制
24.2.1 伺服器搭建
24.2.2 Gitolite伺服器管理
24.2.3 Git常用命令
24.2.4 Git分支
24.2.5 Git協同開發
24.2.6 Xcode中Git的配置與使用
24.3 GitHub代碼託管服務
24.3.1 創建和配置GitHub賬號
24.3.2 創建代碼庫
24.3.3 刪除代碼庫
24.3.4 派生代碼庫
24.3.5 使用GitHub協同開發
24.3.6 管理組織
24.4 CocoaPods與Git管理
25 項目依賴管理
25.1 使用CocoaPods工具管理依賴
25.1.1 安裝CocoaPods
25.1.2搜尋庫
25.1.3 項目與第三方庫搭配形式
25.1.4 示例:靜態程式庫形式管理依賴
25.1.5 示例:框架形式管理依賴
25.2 使用Carthage工具管理依賴
25.2.1 安裝Carthage
25.2.2 項目與第三方庫搭配形式
25.2.3 使用Carthage工具管理依賴
25.2.4 Cartfile檔案
25.2.5 示例:重構MyNotes依賴關係
26 重構MyNotes套用——iOS網路通信中的設計模式與架構設計
26.1 行動網路通信套用的分層架構設計
26.2 Objective-C版本:在工作空間中添加和配置MKNetworkKit
26.3 基於委託模式實現
26.3.1 網路通信與委託模式
26.3.2 在異步網路通信中使用委託模式實現分層架構設計
26.3.3 類圖
26.3.4 時序圖
26.3.5 數據持久層重構
26.3.6 業務邏輯層的代碼實現
26.3.7 表示層的代碼實現
26.4 基於觀察者模式的通知機制實現
26.4.1 觀察者模式的通知機制回顧
26.4.2 異步網路通信中通知機制的分層架構設計
26.4.3 類圖
26.4.4 時序圖
26.4.5 數據持久層的重構
26.4.6 業務邏輯層的代碼實現
26.4.7 表示層的代碼實現
27 把你的套用放到App Store
27.1 收官
27.1.1 在Xcode 6中添加圖示
27.1.2 在Xcode 6中添加啟動界面
27.1.3 調整Identity和Deployment Info屬性
27.1.4 為發布進行編譯
27.2 發布流程
27.2.1 創建套用
27.2.2 基本信息輸入
27.2.3 套用定價
27.2.4 上傳套用
27.2.5 提交審核
27.3 常見審核不通過的原因
27.3.1 功能問題
27.3.2 用戶界面問題
27.3.3 商業問題
27.3.4 不當內容
27.3.5 其他問題
28 iOS敏捷開發項目實戰——2016里約熱內盧奧運會套用開發及App Store發布
28.1 套用分析與設計
28.1.1 套用概述
28.1.2 需求分析
28.1.3 原型設計
28.1.4 資料庫設計
28.1.5 架構設計
28.2 iOS敏捷開發
28.2.1 敏捷開發宣言
28.2.2 iOS適合敏捷開發?
28.2.3 iOS敏捷開發最佳實踐
28.3 任務1:創建套用工作空間和工程
28.3.1 疊代1.1:創建Swift版本的工程
28.3.2 疊代1.2:創建Objective-C版本
28.3.3 工作空間
28.3.4 疊代1.3:發布到GitHub
28.4 任務2:信息系統層與持久層開發
28.4.1 疊代2.1:編寫資料庫DDL腳本
28.4.2 疊代2.2:插入初始數據到
28.4.3 資料庫
28.4.4 疊代2.3:編寫實體類
28.4.5 疊代2.4:DAO類XCTest單元
28.4.6 測試
28.4.7 疊代2.5:資料庫幫助類
28.4.8 DBHelper
28.4.9 疊代2.5:編寫DAO類
28.4.10 疊代2.6:發布到GitHub
28.5 任務3:業務邏輯層開發
28.5.1 任務3:業務邏輯層開發
28.5.2 疊代3.1:對比賽項目業務邏輯
28.5.3 類進行XCTest單元測試
28.5.4 疊代3.2:編寫比賽項目業務
28.5.5 邏輯類
28.5.6 疊代3.3:對比賽日程業務邏輯
28.5.7 類進行XCTest單元測試
28.5.8 疊代3.4:編寫比賽日程業務
28.5.9 邏輯類
28.5.10 疊代3.5:發布到GitHub
28.6 任務4:表示層開發
28.6.1 疊代4.1:使用資源目錄管理
28.6.2 圖片和圖示資源
28.6.3 疊代4.2:根據原型設計初步
28.6.4 設計iPad故事板
28.6.5 疊代4.3:根據原型設計初步
28.6.6 設計iPhone故事板
28.6.7 疊代4.4:首頁模組
28.6.8 疊代4.5:比賽項目模組
28.6.9 疊代4.6:比賽日程模組
28.6.10 疊代4.7:倒計時模組表示層
28.6.11 疊代4.8:關於我們模組表示層
28.6.12 疊代4.9:發布到GitHub
28.7 任務5:收工
28.7.1 疊代5.1:添加圖示
28.7.2 疊代5.2:設計和添加啟動界面
28.7.3 疊代5.4:性能測試與改善
28.7.4 疊代5.5:發布到GitHub上
28.7.5 疊代5.6:在App Store上發布套用