第一部分 基礎篇
第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
15.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
· · · · · · (
收起)