iOS開發指南從零基礎到App Store上架第三版

iOS開發指南從零基礎到App Store上架第三版

《iOS開發指南從零基礎到App Store上架》第3版 是2015年4月人民郵電出版社出版的圖書,作者是關東升。

內容簡介

《iOS開發指南從零基礎到App Store上架第3版》Sw和Objective-C語言為基礎進行講解,共分4篇:開篇為基礎篇,主要講解iOS的一些基礎知識;第二篇為網路篇,主要講解iOS網路開發的相關知識;第三篇為進階篇,介紹了iOS高級內容、商業思考等;結尾一篇是實戰篇,通過兩個真實的項目,帶領讀者身臨其境地完成一個項目的開發,使讀者了解整個開發過程以及開發中的技巧。

作者簡介

關東升,智捷課堂創始人,國內知名iOS技術作家,iOS技術顧問,高級培訓講師,移動開發專家。擔任51CTO社區iOS技術顧問,精通iOS、Android和Windows?Phone及HTML5等移動開發技術。曾先後主持開發大型網路遊戲《神農訣》的iOS和Android客戶端開發,國家農產品追溯系統的iPad客戶端開發,酒店預訂系統的iPhone客戶端開發,金融系統微博的iOS、Windows?Phone?及Android客戶端開發。在App?Store上發布多款遊戲和套用軟體,擅長移動平台的套用和遊戲類項目開發。長期為中國移動研究院、雲南移動、東軟、方正科技、惠普、NTT、深圳康拓普、上海財富168、天津港務局、福州軟體園、廣州軟體園等企事業單位授課。除本書外,還著有《Swift開發指南》《iPhone與iPad開發實戰——iOS經典套用剖析》《品味移動設計》《互動設計的藝術》《Android開發案例驅動教程》、《Android網路遊戲開發實戰》,以及《Cocos2d-x實戰》系列叢書等。

作品目錄

第一部分 基礎篇

第1章 開篇綜述 2

1.1 iOS概述 2

1.1.1 iOS介紹 2

1.1.2 iOS 8的新特性 2

1.2 開發環境及開發工具 3

1.3 本書中的約定 4

1.3.1 案例代碼約定 4

1.3.2 圖示的約定 5

1.3.3 方法命名約定 6

1.3.4 構造器命名約定 7

第2章 第一個iOS應用程式 9

2.1 創建HelloWorld工程 9

2.1.1 創建工程 9

2.1.2 Xcode中的iOS工程模板 14

2.1.3 套用剖析 15

2.2 HelloWorld工程中的故事板檔案 17

2.2.1 故事板的導航特點 17

2.2.2 故事板中的Scene和Segue 19

2.3 套用生命周期 19

2.3.1 非運行狀態——套用啟動場景 21

2.3.2 點擊Home鍵——套用退出場景 22

2.3.3 掛起重新運行場景 24

2.3.4 記憶體清除——套用終止場景 25

2.4 視圖生命周期 25

2.5 設定產品屬性 27

2.5.1 Xcode中的PROJECT和TARGET 27

2.5.2 設定常用的產品屬性 29

2.6 iOS API簡介 30

2.6.1 API概述 31

2.6.2 如何使用API幫助 33

2.7 小結 36

第3章 UIView與視圖 37

3.1 視圖“始祖”——UIView 37

3.1.1 UIView“家族” 37

3.1.2 套用界面的構建層次 39

3.1.3 視圖分類 40

3.2 標籤與按鈕 40

3.2.1 標籤控制項 41

3.2.2 按鈕控制項 42

3.3 動作與輸出口 44

3.4 TextField和TextView 48

3.4.1 TextField控制項 48

3.4.2 TextView控制項 49

3.4.3 鍵盤的打開和關閉 50

3.4.4 關閉和打開鍵盤的通知 50

3.4.5 鍵盤的種類 51

3.5 開關控制項、滑塊控制項和分段控制項 52

3.5.1 開關控制項 53

3.5.2 滑塊控制項 53

3.5.3 分段控制項 54

3.6 網頁視圖WebView 54

3.7 等待相關的控制項與進度條 57

3.7.1 活動指示器ActivityIndicatorView 58

3.7.2 進度條ProgressView 59

3.8 警告框和操作表 60

3.8.1 警告框 60

3.8.2 操作表ActionSheet 62

3.8.3 使用iOS 8 UIAlertController實現 63

3.9 工具列和導航欄 64

3.9.1 工具列 64

3.9.2 導航欄 67

3.10 小結 70

第4章 iOS 8多解析度螢幕適配 71

4.1 iOS 8螢幕的多樣性 71

4.1.1 iOS 8螢幕介紹 71

4.1.2 iOS 8的三種解析度 72

4.1.3 獲得iOS設備螢幕信息 73

4.2 iOS螢幕布局 74

4.2.1 iOS中的“欄” 74

4.2.2 傳統布局 75

4.3 Auto Layout布局 77

4.3.1 在Interface Builder中管理Auto Layout約束 77

4.3.2 實例:Auto Layout布局 78

4.4 Size Class與iOS 8多螢幕適配 83

4.4.1 在Interface Builder中使用Size Class 83

4.4.2 Size Class的九宮格 84

4.4.3 實例:使用Size Class 85

4.5 在螢幕滾動視圖中使用Auto Layout和Size Class 90

4.5.1 螢幕滾動視圖的重要屬性 90

4.5.2 螢幕滾動視圖實例 92

4.6 使用資源目錄(asset catalog)管理圖片 97

4.7 小結 100

第5章 委託協定、數據源協定與高級視圖 101

5.1 視圖中的委託協定和數據源協定 101

5.2 選擇器 101

5.2.1 日期選擇器 101

5.2.2 普通選擇器 103

5.2.3 數據源協定與委託協定 106

5.3 集合視圖 108

5.3.1 集合視圖介紹 108

5.3.2 實例:奧運會比賽項目 109

5.3.3 添加集合視圖控制器 110

5.3.4 添加集合視圖單元格 113

5.3.5 數據源協定與委託協定 116

5.4 小結 117

第6章 表視圖 118

6.1 概述 118

6.1.1 表視圖的組成 118

6.1.2 表視圖的相關類 119

6.1.3 表視圖分類 119

6.1.4 單元格的組成和樣式 121

6.1.5 數據源協定與委託協定 123

6.2 簡單表視圖 123

6.2.1 創建簡單表視圖 123

6.2.2 自定義單元格 128

6.2.3 添加搜尋欄 131

6.3 分節表視圖 137

6.3.1 添加索引 137

6.3.2 分組 140

6.3.3 靜態表與控制界面布局 141

6.4 修改單元格 144

6.4.1 刪除和插入單元格 144

6.4.2 移動單元格 151

6.5 表視圖UI設計模式 153

6.5.1 分頁模式 153

6.5.2 下拉刷新模式 154

6.5.3 下拉刷新控制項 154

6.6 小結 157

第7章 視圖控制器與導航模式 158

7.1 概述 158

7.1.1 視圖控制器的種類 158

7.1.2 導航模式 158

7.1.3 模態視圖 160

7.2 平鋪導航 166

7.2.1 套用場景 166

7.2.2 基於分屏導航的實現 168

7.2.3 基於電子書導航的實現 173

7.3 標籤導航 178

7.3.1 套用場景 178

7.3.2 實現 179

7.4 樹形結構導航 182

7.4.1 套用場景 182

7.4.2 實現 183

7.5 組合使用導航模式 190

7.5.1 套用場景 190

7.5.2 實現 191

7.6 小結 198

第8章 iOS常用設計模式 199

8.1 單例模式 199

8.1.1 問題提出 199

8.1.2 Objective-C實現原理 199

8.1.3 Swift實現原理 200

8.1.4 套用案例 201

8.2 委託模式 202

8.2.1 問題提出 202

8.2.2 實現原理 204

8.2.3 套用案例 207

8.3 觀察者模式 211

8.3.1 問題提出 211

8.3.2 實現原理 211

8.3.3 通知機制和KVO機制 212

8.4 MVC 模式 218

8.4.1 MVC模式概述 218

8.4.2 Cocoa Touch中的MVC模式 219

8.5 小結 221

第9章 iPhone與iPad套用開發的差異 222

9.1 概述 222

9.1.1 套用場景差異 222

9.1.2 設計和開發需注意的問題 222

9.2 iPad專用API 225

9.2.1 UIPopoverController控制器 225

9.2.2 UISplitViewController控制器 229

9.3 小結 234

第10章 iOS分層架構設計 235

10.1 低耦合企業級系統架構設計 235

10.2 iOS分層架構設計 236

10.2.1 工程與工作空間 236

10.2.2 靜態程式庫 237

10.2.3 框架 237

10.2.4 10種分層模式 238

10.3 實例:MyNotes套用 238

10.4 基於同一工程的分層 240

10.4.1 採用純Swift語言實現——PSSS模式 240

10.4.2 採用純Objective-C語言實現——POOO模式 243

10.4.3 採用Swift與Objective-C混合搭配實現——PSOO模式 247

10.5 基於同一工作空間靜態程式庫實現的WLSOO模式 247

10.5.1 使用工作空間 247

10.5.2 添加數據持久層工程 248

10.5.3 建立業務邏輯層與數據持久層的依賴關係 249

10.5.4 建立表示層與業務邏輯層的依賴關係 251

10.6 基於同一工作空間框架實現的WFSSS模式 251

10.6.1 創建框架工程 251

10.6.2 依賴關係建立 253

10.6.3 代碼重構 254

10.7 基於同一工作空間框架實現的WFOOO模式 255

10.7.1 設定Public頭檔案 255

10.7.2 建立表示層與業務邏輯層的依賴關係 256

10.7.3 代碼重構 256

10.8 基於同一工作空間框架實現的WFSOO模式 256

10.8.1 設定Public頭檔案 256

10.8.2 建立表示層與業務邏輯層的依賴關係 257

10.8.3 代碼重構 257

10.9 基於同一工作空間框架實現的WFOSS模式 258

10.9.1 設定Public頭檔案 258

10.9.2 代碼重構 258

10.10 小結 258

第11章 數據持久化 259

11.1 概述 259

11.1.1 沙箱目錄 259

11.1.2 持久化方式 260

11.2 屬性列表 260

11.3 對象歸檔 264

11.4 使用SQLite資料庫 268

11.4.1 SQLite數據類型 268

11.4.2 創建資料庫 269

11.4.3 查詢數據 271

11.4.4 修改數據 273

11.5 Core Data 276

11.5.1 ORM 276

11.5.2 Core Data堆疊 276

11.5.3 建模和生成實體 280

11.5.4 採用Core Data分層架構設計 283

11.5.5 查詢數據 285

11.5.6 修改數據 286

11.6 小結 288

第12章 應用程式設定 289

12.1 概述 289

12.1.1 設定 289

12.1.2 配置 290

12.2 應用程式設定包 291

12.3 設定項目種類 293

12.3.1 文本欄位 295

12.3.2 開關 298

12.3.3 滑塊 299

12.3.4 值列表 300

12.3.5 子界面 301

12.4 讀取設定 303

12.5 小結 304

第13章 國際化 305

13.1 概述 305

13.1.1 需要國際化的內容 305

13.1.2 國際化目錄結構 307

13.2 文本信息國際化 308

13.2.1 系統按鈕和信息國際化 308

13.2.2 套用名稱國際化 309

13.2.3 程式代碼輸出的靜態文本國際化 311

13.2.4 使用genstring工具 312

13.3 xib和故事板檔案國際化 313

13.3.1 使用Base國際化技術 313

13.3.2 Auto Layout與國際化 315

13.4 資源檔案國際化 317

13.4.1 圖片資源檔案國際化 317

13.4.2 聲音資源檔案國際化 318

13.5 小結 318

第14章 訪問聯繫人 319

14.1 概述 319

14.2 讀取聯繫人信息 320

14.2.1 查詢聯繫人記錄 321

14.2.2 讀取單值屬性 324

14.2.3 讀取多值屬性 326

14.2.4 讀取圖片屬性 328

14.3 寫入聯繫人信息 329

14.3.1 創建聯繫人 330

14.3.2 修改聯繫人 332

14.3.3 刪除聯繫人 333

14.4 高級API 335

14.4.1 選擇聯繫人 335

14.4.2 顯示和修改聯繫人 336

14.4.3 創建聯繫人 339

14.5 小結 342

第二部分 網路篇

第15章 訪問Web Service 344

15.1 概述 344

15.2 數據交換格式 344

15.2.1 XML文檔結構 346

15.2.2 解析XML文檔 347

15.2.3 JSON文檔結構 355

15.2.4 JSON數據解碼 356

15.3 REST Web Service 357

15.3.1 HTTP和HTTPS協定 358

15.3.2 同步GET請求方法 358

15.3.3 異步GET請求方法 361

15.3.4 POST請求方法 362

15.3.5 調用REST Web Service的插入、修改和刪除方法 363

15.4 使用輕量級網路請求框架MKNetworkKit 368

15.4.1 ASIHTTPRequest、AFNetworking和MKNetworkKit比較 368

15.4.2 安裝和配置MKNetworkKit框架 369

5.4.3 網路請求 370

15.4.4 下載數據 371

15.4.5 上傳數據 373

15.5 反饋網路信息改善用戶體驗 375

15.5.1 使用下拉刷新控制項改善用戶體驗 375

15.5.2 使用活動指示器控制項 378

15.5.3 使用網路活動指示器 380

15.6 小結 380

第16章 定位服務與地圖套用 381

16.1 定位服務 381

16.1.1 定位服務編程 382

16.1.2 地理信息反編碼 386

16.1.3 地理信息編碼查詢 388

16.1.4 關於定位服務的測試 390

16.2 使用iOS蘋果地圖 393

16.2.1 顯示地圖 393

16.2.2 添加標註 395

16.2.3 跟蹤用戶位置變化 398

16.3 使用程式外地圖 399

16.3.1 調用iOS蘋果地圖 400

16.3.2 調用谷歌Web地圖 402

16.4 小結 404

第三部分 進階篇

第17章 iOS中的商業模式 406

17.1 收費策略 406

17.1.1 iOS如何賺錢 406

17.1.2 避免定價策略誤區 406

17.1.3 免費軟體的藝術 407

17.1.4 在適當的時間、適當的地點植入廣告 407

17.1.5 嘗試不同的盈利模式 407

17.2 使用蘋果iAd 廣告 408

17.2.1 橫幅廣告 408

17.2.2 插頁廣告 411

17.2.3 查看你的收入 417

17.3 使用谷歌AdMob廣告 419

17.3.1 註冊AdMob賬號 419

17.3.2 管理AdMob廣告 419

17.3.3 AdMob廣告類型 422

17.3.4 下載AdMob Ads SDK 423

17.3.5 配置AdMob開發環境 424

17.3.6 AdMob橫幅廣告 426

17.3.7 添加AdMob插頁廣告 428

17.3.8 為廣告提交用戶和位置信息 431

17.3.9 搜尋廣告 431

17.4 小結 433

第18章 找出程式中的bug——調試 434

18.1 Xcode調試工具 434

18.1.1 定位編譯錯誤 434

18.1.2 查看和顯示日誌 435

18.1.3 設定和查看斷點 437

18.1.4 調試工具 442

18.1.5 輸出視窗 443

18.1.6 變數查看視窗 444

18.1.7 查看執行緒 445

18.2 日誌與斷言輸出 446

18.2.1 使用NSLog函式 446

18.2.2 使用斷言 447

18.3 異常堆疊報告分析 448

18.3.1 跟蹤異常堆疊 448

18.3.2 分析堆疊報告 450

18.4 在iOS設備上調試 450

18.4.1 創建開發者證書 451

18.4.2 設備註冊 455

18.4.3 創建App ID 456

18.4.4 創建配置概要檔案 459

18.4.5 設備調試 460

18.5 Xcode設備管理工具 461

18.5.1 查看設備上的應用程式 462

18.5.2 設備日誌 464

18.6 小結 464

第19章 測試驅動下的iOS套用開發 465

19.1 測試驅動的軟體開發概述 465

19.1.1 測試驅動的軟體開發流程 465

19.1.2 測試驅動的軟體開發案例 466

19.1.3 iOS單元測試框架 467

19.2 使用XCTest測試框架 468

19.2.1 添加XCTest到工程 468

19.2.2 編寫XCTest測試方法 469

19.2.3 運行測試程式 472

19.2.4 分析測試報告 473

19.3 異步單元測試 475

19.4 性能測試 478

19.4.1 配置測試環境 478

19.4.2 測試代碼 479

19.4.3 分析測試結果 480

19.5 iOS單元測試最佳實踐 481

19.5.1 測試數據持久層 481

19.5.2 測試業務邏輯層 485

19.6 小結 486

第20章 讓你的程式“飛”起來——性能最佳化 487

20.1 記憶體最佳化 487

20.1.1 記憶體管理 487

20.1.2 使用Analyze和Instruments工具解決記憶體泄漏問題 487

20.1.3 查找和解決殭屍對象 494

20.1.4 autorelease的使用問題 497

20.1.5 回響記憶體警告 497

20.2 最佳化資源檔案 499

20.2.1 圖片檔案最佳化 499

20.2.2 音頻檔案最佳化 500

20.3 延遲載入 501

20.3.1 資源檔案的延遲載入 501

20.3.2 故事板檔案的延遲載入 505

20.3.3 xib檔案的延遲載入 507

20.4 數據持久化的最佳化 509

20.4.1 使用檔案 509

20.4.2 使用SQLite資料庫 513

20.4.3 使用Core Data 514

20.5 可重用對象的使用 516

20.5.1 表視圖中的可重用對象 516

20.5.2 集合視圖中的可重用對象 518

20.5.3 地圖視圖中的可重用對象 519

20.6 並發處理與多核CPU 520

20.6.1 主執行緒阻塞問題 520

20.6.2 選擇NSThread還是GCD 521

20.7 小結 521

第21章 管理好你的程式代碼——代碼版本控制 522

21.1 概述 522

21.1.1 版本控制歷史 522

21.1.2 基本概念 523

21.2 Git代碼版本控制 523

21.2.1 伺服器搭建 523

21.2.2 Gitolite伺服器管理 525

21.2.3 Git常用命令 527

21.2.4 Git分支 529

21.2.5 Git協同開發 533

21.2.6 Xcode中Git的配置與使用 535

21.3 GitHub代碼託管服務 542

21.3.1 創建和配置GitHub賬號 542

21.3.2 創建代碼庫 544

21.3.3 刪除代碼庫 546

21.3.4 派生代碼庫 546

21.3.5 使用GitHub協同開發 549

21.3.6 管理組織 555

21.4 小結 558

第22章 把你的套用放到App Store上 559

22.1 收官 559

22.1.1 在Xcode 6中添加圖示 559

22.1.2 在Xcode 6中添加啟動界面 562

22.1.3 調整Identity和Deployment Info屬性 564

22.1.4 為發布進行編譯 567

22.2 發布流程 571

22.2.1 創建套用 572

22.2.2 基本信息輸入 574

22.2.3 套用定價 577

22.2.4 上傳套用 577

22.2.5 提交審核 579

22.3 常見審核不通過的原因 581

22.3.1 功能問題 581

22.3.2 用戶界面問題 581

22.3.3 商業問題 581

22.3.4 不當內容 581

22.3.5 其他問題 582

22.4 小結 582

第四部分 實戰篇

第23章 重構MyNotes套用——iOS網路通信中的設計模式與架構設計 584

23.1 行動網路通信套用的分層架構設計 584

23.2 Objective-C版本:在工作空間中添加和配置MKNetworkKit 585

23.3 基於委託模式實現 587

23.3.1 網路通信與委託模式 587

23.3.2 在異步網路通信中使用委託模式實現分層架構設計 587

23.3.3 類圖 588

23.3.4 時序圖 591

23.3.5 數據持久層重構 593

23.3.6 業務邏輯層的代碼實現 597

23.3.7 表示層的代碼實現 599

23.4 基於觀察者模式的通知機制實現 603

23.4.1 觀察者模式的通知機制回顧 603

23.4.2 異步網路通信中通知機制的分層架構設計 604

23.4.3 類圖 605

23.4.4 時序圖 606

23.4.5 數據持久層的重構 609

23.4.6 業務邏輯層的代碼實現 611

23.4.7 表示層的代碼實現 612

23.5 小結 616

第24章 iOS敏捷開發項目實戰——2016里約熱內盧奧運會套用開發及App Store發布 617

24.1 套用分析與設計 617

24.1.1 套用概述 617

24.1.2 需求分析 617

24.1.3 原型設計 618

24.1.4 資料庫設計 619

24.1.5 架構設計 619

24.2 iOS敏捷開發 620

24.2.1 敏捷開發宣言 620

24.2.2 iOS適合敏捷開發? 621

24.2.3 iOS敏捷開發最佳實踐 621

24.3 任務1:創建套用工作空間和工程 623

24.3.1 疊代1.1:創建Swift版本的工程 623

24.3.2 疊代1.2:創建Objective-C版本工作空間 623

24.3.3 疊代1.3:發布到GitHub 623

24.4 任務2:信息系統層與持久層開發 624

24.4.1 疊代2.1:編寫資料庫DDL腳本 624

24.4.2 疊代2.2:插入初始數據到資料庫 625

24.4.3 疊代2.3:編寫實體類 625

24.4.4 疊代2.4:DAO類XCTest單元測試 626

24.4.5 疊代2.5:資料庫幫助類DBHelper 629

24.4.6 疊代2.5:編寫DAO類 632

24.4.7 疊代2.6:發布到GitHub 635

24.5 任務3:業務邏輯層開發 636

24.5.1 疊代3.1:對比賽項目業務邏輯類進行XCTest單元測試 636

24.5.2 疊代3.2:編寫比賽項目業務邏輯類 637

24.5.3 疊代3.3:對比賽日程業務邏輯類進行XCTest單元測試 638

24.5.4 疊代3.4:編寫比賽日程業務邏輯類 639

24.5.5 疊代3.5:發布到GitHub 640

24.6 任務4:表示層開發 641

24.6.1 疊代4.1:使用資源目錄管理圖片和圖示資源 641

24.6.2 疊代4.2:根據原型設計初步設計iPad故事板 642

24.6.3 疊代4.3:根據原型設計初步設計iPhone故事板 644

24.6.4 疊代4.4:首頁模組 644

24.6.5 疊代4.5:比賽項目模組 645

24.6.6 疊代4.6:比賽日程模組 649

24.6.7 疊代4.7:倒計時模組表示層 652

24.6.8 疊代4.8:關於我們模組表示層 653

24.6.9 疊代4.9:發布到GitHub 654

24.7 任務5:收工 654

24.7.1 疊代5.1:添加圖示 654

24.7.2 疊代5.2:設計和添加啟動界面 654

24.7.3 疊代5.3:植入谷歌AdMob橫幅廣告 655

24.7.4 疊代5.4:性能測試與改善 657

24.7.5 疊代5.5:發布到GitHub上 658

24.7.6 疊代5.6:在App Store上發布套用 658

24.8 小結 658

第一部分 基礎篇

第1章 開篇綜述 2

1.1 iOS概述 2

1.1.1 iOS介紹 2

1.1.2 iOS 8的新特性 2

1.2 開發環境及開發工具 3

1.3 本書中的約定 4

1.3.1 案例代碼約定 4

1.3.2 圖示的約定 5

1.3.3 方法命名約定 6

1.3.4 構造器命名約定 7

第2章 第一個iOS應用程式 9

2.1 創建HelloWorld工程 9

2.1.1 創建工程 9

2.1.2 Xcode中的iOS工程模板 14

2.1.3 套用剖析 15

2.2 HelloWorld工程中的故事板檔案 17

2.2.1 故事板的導航特點 17

2.2.2 故事板中的Scene和Segue 19

2.3 套用生命周期 19

2.3.1 非運行狀態——套用啟動場景 21

2.3.2 點擊Home鍵——套用退出場景 22

2.3.3 掛起重新運行場景 24

2.3.4 記憶體清除——套用終止場景 25

2.4 視圖生命周期 25

2.5 設定產品屬性 27

2.5.1 Xcode中的PROJECT和TARGET 27

2.5.2 設定常用的產品屬性 29

2.6 iOS API簡介 30

2.6.1 API概述 31

2.6.2 如何使用API幫助 33

2.7 小結 36

第3章 UIView與視圖 37

3.1 視圖“始祖”——UIView 37

3.1.1 UIView“家族” 37

3.1.2 套用界面的構建層次 39

3.1.3 視圖分類 40

3.2 標籤與按鈕 40

3.2.1 標籤控制項 41

3.2.2 按鈕控制項 42

3.3 動作與輸出口 44

3.4 TextField和TextView 48

3.4.1 TextField控制項 48

3.4.2 TextView控制項 49

3.4.3 鍵盤的打開和關閉 50

3.4.4 關閉和打開鍵盤的通知 50

3.4.5 鍵盤的種類 51

3.5 開關控制項、滑塊控制項和分段控制項 52

3.5.1 開關控制項 53

3.5.2 滑塊控制項 53

3.5.3 分段控制項 54

3.6 網頁視圖WebView 54

3.7 等待相關的控制項與進度條 57

3.7.1 活動指示器ActivityIndicatorView 58

3.7.2 進度條ProgressView 59

3.8 警告框和操作表 60

3.8.1 警告框 60

3.8.2 操作表ActionSheet 62

3.8.3 使用iOS 8 UIAlertController實現 63

3.9 工具列和導航欄 64

3.9.1 工具列 64

3.9.2 導航欄 67

3.10 小結 70

第4章 iOS 8多解析度螢幕適配 71

4.1 iOS 8螢幕的多樣性 71

4.1.1 iOS 8螢幕介紹 71

4.1.2 iOS 8的三種解析度 72

4.1.3 獲得iOS設備螢幕信息 73

4.2 iOS螢幕布局 74

4.2.1 iOS中的“欄” 74

4.2.2 傳統布局 75

4.3 Auto Layout布局 77

4.3.1 在Interface Builder中管理Auto Layout約束 77

4.3.2 實例:Auto Layout布局 78

4.4 Size Class與iOS 8多螢幕適配 83

4.4.1 在Interface Builder中使用Size Class 83

4.4.2 Size Class的九宮格 84

4.4.3 實例:使用Size Class 85

4.5 在螢幕滾動視圖中使用Auto Layout和Size Class 90

4.5.1 螢幕滾動視圖的重要屬性 90

4.5.2 螢幕滾動視圖實例 92

4.6 使用資源目錄(asset catalog)管理圖片 97

4.7 小結 100

第5章 委託協定、數據源協定與高級視圖 101

5.1 視圖中的委託協定和數據源協定 101

5.2 選擇器 101

5.2.1 日期選擇器 101

5.2.2 普通選擇器 103

5.2.3 數據源協定與委託協定 106

5.3 集合視圖 108

5.3.1 集合視圖介紹 108

5.3.2 實例:奧運會比賽項目 109

5.3.3 添加集合視圖控制器 110

5.3.4 添加集合視圖單元格 113

5.3.5 數據源協定與委託協定 116

5.4 小結 117

第6章 表視圖 118

6.1 概述 118

6.1.1 表視圖的組成 118

6.1.2 表視圖的相關類 119

6.1.3 表視圖分類 119

6.1.4 單元格的組成和樣式 121

6.1.5 數據源協定與委託協定 123

6.2 簡單表視圖 123

6.2.1 創建簡單表視圖 123

6.2.2 自定義單元格 128

6.2.3 添加搜尋欄 131

6.3 分節表視圖 137

6.3.1 添加索引 137

6.3.2 分組 140

6.3.3 靜態表與控制界面布局 141

6.4 修改單元格 144

6.4.1 刪除和插入單元格 144

6.4.2 移動單元格 151

6.5 表視圖UI設計模式 153

6.5.1 分頁模式 153

6.5.2 下拉刷新模式 154

6.5.3 下拉刷新控制項 154

6.6 小結 157

第7章 視圖控制器與導航模式 158

7.1 概述 158

7.1.1 視圖控制器的種類 158

7.1.2 導航模式 158

7.1.3 模態視圖 160

7.2 平鋪導航 166

7.2.1 套用場景 166

7.2.2 基於分屏導航的實現 168

7.2.3 基於電子書導航的實現 173

7.3 標籤導航 178

7.3.1 套用場景 178

7.3.2 實現 179

7.4 樹形結構導航 182

7.4.1 套用場景 182

7.4.2 實現 183

7.5 組合使用導航模式 190

7.5.1 套用場景 190

7.5.2 實現 191

7.6 小結 198

第8章 iOS常用設計模式 199

8.1 單例模式 199

8.1.1 問題提出 199

8.1.2 Objective-C實現原理 199

8.1.3 Swift實現原理 200

8.1.4 套用案例 201

8.2 委託模式 202

8.2.1 問題提出 202

8.2.2 實現原理 204

8.2.3 套用案例 207

8.3 觀察者模式 211

8.3.1 問題提出 211

8.3.2 實現原理 211

8.3.3 通知機制和KVO機制 212

8.4 MVC 模式 218

8.4.1 MVC模式概述 218

8.4.2 Cocoa Touch中的MVC模式 219

8.5 小結 221

第9章 iPhone與iPad套用開發的差異 222

9.1 概述 222

9.1.1 套用場景差異 222

9.1.2 設計和開發需注意的問題 222

9.2 iPad專用API 225

9.2.1 UIPopoverController控制器 225

9.2.2 UISplitViewController控制器 229

9.3 小結 234

第10章 iOS分層架構設計 235

10.1 低耦合企業級系統架構設計 235

10.2 iOS分層架構設計 236

10.2.1 工程與工作空間 236

10.2.2 靜態程式庫 237

10.2.3 框架 237

10.2.4 10種分層模式 238

10.3 實例:MyNotes套用 238

10.4 基於同一工程的分層 240

10.4.1 採用純Swift語言實現——PSSS模式 240

10.4.2 採用純Objective-C語言實現——POOO模式 243

10.4.3 採用Swift與Objective-C混合搭配實現——PSOO模式 247

10.5 基於同一工作空間靜態程式庫實現的WLSOO模式 247

10.5.1 使用工作空間 247

10.5.2 添加數據持久層工程 248

10.5.3 建立業務邏輯層與數據持久層的依賴關係 249

10.5.4 建立表示層與業務邏輯層的依賴關係 251

10.6 基於同一工作空間框架實現的WFSSS模式 251

10.6.1 創建框架工程 251

10.6.2 依賴關係建立 253

10.6.3 代碼重構 254

10.7 基於同一工作空間框架實現的WFOOO模式 255

10.7.1 設定Public頭檔案 255

10.7.2 建立表示層與業務邏輯層的依賴關係 256

10.7.3 代碼重構 256

10.8 基於同一工作空間框架實現的WFSOO模式 256

10.8.1 設定Public頭檔案 256

10.8.2 建立表示層與業務邏輯層的依賴關係 257

10.8.3 代碼重構 257

10.9 基於同一工作空間框架實現的WFOSS模式 258

10.9.1 設定Public頭檔案 258

10.9.2 代碼重構 258

10.10 小結 258

第11章 數據持久化 259

11.1 概述 259

11.1.1 沙箱目錄 259

11.1.2 持久化方式 260

11.2 屬性列表 260

11.3 對象歸檔 264

11.4 使用SQLite資料庫 268

11.4.1 SQLite數據類型 268

11.4.2 創建資料庫 269

11.4.3 查詢數據 271

11.4.4 修改數據 273

11.5 Core Data 276

11.5.1 ORM 276

11.5.2 Core Data堆疊 276

11.5.3 建模和生成實體 280

11.5.4 採用Core Data分層架構設計 283

11.5.5 查詢數據 285

11.5.6 修改數據 286

11.6 小結 288

第12章 應用程式設定 289

12.1 概述 289

12.1.1 設定 289

12.1.2 配置 290

12.2 應用程式設定包 291

12.3 設定項目種類 293

12.3.1 文本欄位 295

12.3.2 開關 298

12.3.3 滑塊 299

12.3.4 值列表 300

12.3.5 子界面 301

12.4 讀取設定 303

12.5 小結 304

第13章 國際化 305

13.1 概述 305

13.1.1 需要國際化的內容 305

13.1.2 國際化目錄結構 307

13.2 文本信息國際化 308

13.2.1 系統按鈕和信息國際化 308

13.2.2 套用名稱國際化 309

13.2.3 程式代碼輸出的靜態文本國際化 311

13.2.4 使用genstring工具 312

13.3 xib和故事板檔案國際化 313

13.3.1 使用Base國際化技術 313

13.3.2 Auto Layout與國際化 315

13.4 資源檔案國際化 317

13.4.1 圖片資源檔案國際化 317

13.4.2 聲音資源檔案國際化 318

13.5 小結 318

第14章 訪問聯繫人 319

14.1 概述 319

14.2 讀取聯繫人信息 320

14.2.1 查詢聯繫人記錄 321

14.2.2 讀取單值屬性 324

14.2.3 讀取多值屬性 326

14.2.4 讀取圖片屬性 328

14.3 寫入聯繫人信息 329

14.3.1 創建聯繫人 330

14.3.2 修改聯繫人 332

14.3.3 刪除聯繫人 333

14.4 高級API 335

14.4.1 選擇聯繫人 335

14.4.2 顯示和修改聯繫人 336

14.4.3 創建聯繫人 339

14.5 小結 342

第二部分 網路篇

第15章 訪問Web Service 344

15.1 概述 344

15.2 數據交換格式 344

15.2.1 XML文檔結構 346

15.2.2 解析XML文檔 347

15.2.3 JSON文檔結構 355

15.2.4 JSON數據解碼 356

15.3 REST Web Service 357

15.3.1 HTTP和HTTPS協定 358

15.3.2 同步GET請求方法 358

15.3.3 異步GET請求方法 361

15.3.4 POST請求方法 362

15.3.5 調用REST Web Service的插入、修改和刪除方法 363

15.4 使用輕量級網路請求框架MKNetworkKit 368

15.4.1 ASIHTTPRequest、AFNetworking和MKNetworkKit比較 368

15.4.2 安裝和配置MKNetworkKit框架 369

5.4.3 網路請求 370

15.4.4 下載數據 371

15.4.5 上傳數據 373

15.5 反饋網路信息改善用戶體驗 375

15.5.1 使用下拉刷新控制項改善用戶體驗 375

15.5.2 使用活動指示器控制項 378

15.5.3 使用網路活動指示器 380

15.6 小結 380

第16章 定位服務與地圖套用 381

16.1 定位服務 381

16.1.1 定位服務編程 382

16.1.2 地理信息反編碼 386

16.1.3 地理信息編碼查詢 388

16.1.4 關於定位服務的測試 390

16.2 使用iOS蘋果地圖 393

16.2.1 顯示地圖 393

16.2.2 添加標註 395

16.2.3 跟蹤用戶位置變化 398

16.3 使用程式外地圖 399

16.3.1 調用iOS蘋果地圖 400

16.3.2 調用谷歌Web地圖 402

16.4 小結 404

第三部分 進階篇

第17章 iOS中的商業模式 406

17.1 收費策略 406

17.1.1 iOS如何賺錢 406

17.1.2 避免定價策略誤區 406

17.1.3 免費軟體的藝術 407

17.1.4 在適當的時間、適當的地點植入廣告 407

17.1.5 嘗試不同的盈利模式 407

17.2 使用蘋果iAd 廣告 408

17.2.1 橫幅廣告 408

17.2.2 插頁廣告 411

17.2.3 查看你的收入 417

17.3 使用谷歌AdMob廣告 419

17.3.1 註冊AdMob賬號 419

17.3.2 管理AdMob廣告 419

17.3.3 AdMob廣告類型 422

17.3.4 下載AdMob Ads SDK 423

17.3.5 配置AdMob開發環境 424

17.3.6 AdMob橫幅廣告 426

17.3.7 添加AdMob插頁廣告 428

17.3.8 為廣告提交用戶和位置信息 431

17.3.9 搜尋廣告 431

17.4 小結 433

第18章 找出程式中的bug——調試 434

18.1 Xcode調試工具 434

18.1.1 定位編譯錯誤 434

18.1.2 查看和顯示日誌 435

18.1.3 設定和查看斷點 437

18.1.4 調試工具 442

18.1.5 輸出視窗 443

18.1.6 變數查看視窗 444

18.1.7 查看執行緒 445

18.2 日誌與斷言輸出 446

18.2.1 使用NSLog函式 446

18.2.2 使用斷言 447

18.3 異常堆疊報告分析 448

18.3.1 跟蹤異常堆疊 448

18.3.2 分析堆疊報告 450

18.4 在iOS設備上調試 450

18.4.1 創建開發者證書 451

18.4.2 設備註冊 455

18.4.3 創建App ID 456

18.4.4 創建配置概要檔案 459

18.4.5 設備調試 460

18.5 Xcode設備管理工具 461

18.5.1 查看設備上的應用程式 462

18.5.2 設備日誌 464

18.6 小結 464

第19章 測試驅動下的iOS套用開發 465

19.1 測試驅動的軟體開發概述 465

19.1.1 測試驅動的軟體開發流程 465

19.1.2 測試驅動的軟體開發案例 466

19.1.3 iOS單元測試框架 467

19.2 使用XCTest測試框架 468

19.2.1 添加XCTest到工程 468

19.2.2 編寫XCTest測試方法 469

19.2.3 運行測試程式 472

19.2.4 分析測試報告 473

19.3 異步單元測試 475

19.4 性能測試 478

19.4.1 配置測試環境 478

19.4.2 測試代碼 479

19.4.3 分析測試結果 480

19.5 iOS單元測試最佳實踐 481

19.5.1 測試數據持久層 481

19.5.2 測試業務邏輯層 485

19.6 小結 486

第20章 讓你的程式“飛”起來——性能最佳化 487

20.1 記憶體最佳化 487

20.1.1 記憶體管理 487

20.1.2 使用Analyze和Instruments工具解決記憶體泄漏問題 487

20.1.3 查找和解決殭屍對象 494

20.1.4 autorelease的使用問題 497

20.1.5 回響記憶體警告 497

20.2 最佳化資源檔案 499

20.2.1 圖片檔案最佳化 499

20.2.2 音頻檔案最佳化 500

20.3 延遲載入 501

20.3.1 資源檔案的延遲載入 501

20.3.2 故事板檔案的延遲載入 505

20.3.3 xib檔案的延遲載入 507

20.4 數據持久化的最佳化 509

20.4.1 使用檔案 509

20.4.2 使用SQLite資料庫 513

20.4.3 使用Core Data 514

20.5 可重用對象的使用 516

20.5.1 表視圖中的可重用對象 516

20.5.2 集合視圖中的可重用對象 518

20.5.3 地圖視圖中的可重用對象 519

20.6 並發處理與多核CPU 520

20.6.1 主執行緒阻塞問題 520

20.6.2 選擇NSThread還是GCD 521

20.7 小結 521

第21章 管理好你的程式代碼——代碼版本控制 522

21.1 概述 522

21.1.1 版本控制歷史 522

21.1.2 基本概念 523

21.2 Git代碼版本控制 523

21.2.1 伺服器搭建 523

21.2.2 Gitolite伺服器管理 525

21.2.3 Git常用命令 527

21.2.4 Git分支 529

21.2.5 Git協同開發 533

21.2.6 Xcode中Git的配置與使用 535

21.3 GitHub代碼託管服務 542

21.3.1 創建和配置GitHub賬號 542

21.3.2 創建代碼庫 544

21.3.3 刪除代碼庫 546

21.3.4 派生代碼庫 546

21.3.5 使用GitHub協同開發 549

21.3.6 管理組織 555

21.4 小結 558

第22章 把你的套用放到App Store上 559

22.1 收官 559

22.1.1 在Xcode 6中添加圖示 559

22.1.2 在Xcode 6中添加啟動界面 562

22.1.3 調整Identity和Deployment Info屬性 564

22.1.4 為發布進行編譯 567

22.2 發布流程 571

22.2.1 創建套用 572

22.2.2 基本信息輸入 574

22.2.3 套用定價 577

22.2.4 上傳套用 577

22.2.5 提交審核 579

22.3 常見審核不通過的原因 581

22.3.1 功能問題 581

22.3.2 用戶界面問題 581

22.3.3 商業問題 581

22.3.4 不當內容 581

22.3.5 其他問題 582

22.4 小結 582

第四部分 實戰篇

第23章 重構MyNotes套用——iOS網路通信中的設計模式與架構設計 584

23.1 行動網路通信套用的分層架構設計 584

23.2 Objective-C版本:在工作空間中添加和配置MKNetworkKit 585

23.3 基於委託模式實現 587

23.3.1 網路通信與委託模式 587

23.3.2 在異步網路通信中使用委託模式實現分層架構設計 587

23.3.3 類圖 588

23.3.4 時序圖 591

23.3.5 數據持久層重構 593

23.3.6 業務邏輯層的代碼實現 597

23.3.7 表示層的代碼實現 599

23.4 基於觀察者模式的通知機制實現 603

23.4.1 觀察者模式的通知機制回顧 603

23.4.2 異步網路通信中通知機制的分層架構設計 604

23.4.3 類圖 605

23.4.4 時序圖 606

23.4.5 數據持久層的重構 609

23.4.6 業務邏輯層的代碼實現 611

23.4.7 表示層的代碼實現 612

23.5 小結 616

第24章 iOS敏捷開發項目實戰——2016里約熱內盧奧運會套用開發及App Store發布 617

24.1 套用分析與設計 617

24.1.1 套用概述 617

24.1.2 需求分析 617

24.1.3 原型設計 618

24.1.4 資料庫設計 619

24.1.5 架構設計 619

24.2 iOS敏捷開發 620

24.2.1 敏捷開發宣言 620

24.2.2 iOS適合敏捷開發? 621

24.2.3 iOS敏捷開發最佳實踐 621

24.3 任務1:創建套用工作空間和工程 623

24.3.1 疊代1.1:創建Swift版本的工程 623

24.3.2 疊代1.2:創建Objective-C版本工作空間 623

24.3.3 疊代1.3:發布到GitHub 623

24.4 任務2:信息系統層與持久層開發 624

24.4.1 疊代2.1:編寫資料庫DDL腳本 624

24.4.2 疊代2.2:插入初始數據到資料庫 625

24.4.3 疊代2.3:編寫實體類 625

24.4.4 疊代2.4:DAO類XCTest單元測試 626

24.4.5 疊代2.5:資料庫幫助類DBHelper 629

24.4.6 疊代2.5:編寫DAO類 632

24.4.7 疊代2.6:發布到GitHub 635

24.5 任務3:業務邏輯層開發 636

24.5.1 疊代3.1:對比賽項目業務邏輯類進行XCTest單元測試 636

24.5.2 疊代3.2:編寫比賽項目業務邏輯類 637

24.5.3 疊代3.3:對比賽日程業務邏輯類進行XCTest單元測試 638

24.5.4 疊代3.4:編寫比賽日程業務邏輯類 639

24.5.5 疊代3.5:發布到GitHub 640

24.6 任務4:表示層開發 641

24.6.1 疊代4.1:使用資源目錄管理圖片和圖示資源 641

24.6.2 疊代4.2:根據原型設計初步設計iPad故事板 642

24.6.3 疊代4.3:根據原型設計初步設計iPhone故事板 644

24.6.4 疊代4.4:首頁模組 644

24.6.5 疊代4.5:比賽項目模組 645

24.6.6 疊代4.6:比賽日程模組 649

24.6.7 疊代4.7:倒計時模組表示層 652

24.6.8 疊代4.8:關於我們模組表示層 653

24.6.9 疊代4.9:發布到GitHub 654

24.7 任務5:收工 654

24.7.1 疊代5.1:添加圖示 654

24.7.2 疊代5.2:設計和添加啟動界面 654

24.7.3 疊代5.3:植入谷歌AdMob橫幅廣告 655

24.7.4 疊代5.4:性能測試與改善 657

24.7.5 疊代5.5:發布到GitHub上 658

24.7.6 疊代5.6:在App Store上發布套用 658

24.8 小結 658

相關詞條

熱門詞條

聯絡我們