目 錄
第一部分 基礎篇
第1章 開篇綜述 2
1.1 iOS概述 2
1.1.1 iOS介紹 2
1.1.2 iOS 6新特性 2
1.2 開發環境及開發工具 3
1.3 本書中的約定 4
1.3.1 案例代碼約定 4
1.3.2 圖示的約定 5
第2章 第一個iOS應用程序 7
2.1 創建基於nib的HelloWorld工程 7
2.1.1 創建工程 7
2.1.2 Xcode中的iOS工程模闆 10
2.1.3 應用剖析 11
2.2 基於故事闆的HelloWorld工程 13
2.2.1 使用故事闆重構HelloWorld 14
2.2.2 nib、xib與故事闆 15
2.2.3 故事闆中的Scene和Segue 16
2.3 應用生命周期 17
2.3.1 非運行狀態——應用啓動場景 18
2.3.2 點擊Home鍵——應用退齣場景 19
2.3.3 掛起重新運行場景 20
2.3.4 內存清除——應用終止場景 21
2.4 視圖生命周期 21
2.4.1 視圖生命周期與視圖控製器關係 22
2.4.2 iOS 6 UI狀態保持和恢復 23
2.5 設置産品屬性 25
2.5.1 Xcode中的Project和Target 25
2.5.2 設置常用的産品屬性 27
2.6 iOS API簡介 29
2.6.1 API概述 29
2.6.2 如何使用API幫助 31
2.7 小結 33
第3章 iOS常用設計模式 34
3.1 單例模式 34
3.1.1 問題提齣 34
3.1.2 實現原理 34
3.1.3 應用案例 35
3.2 委托模式 37
3.2.1 問題提齣 37
3.2.2 實現原理 39
3.2.3 應用案例 41
3.3 觀察者模式 44
3.3.1 問題提齣 44
3.3.2 實現原理 45
3.3.3 通知機製和KVO機製 47
3.4 MVC模式 53
3.4.1 MVC模式概述 53
3.4.2 Cocoa Touch中的MVC模式 54
3.5 小結 56
第4章 UIView與控件 57
4.1 視圖“始祖”——UIView 57
4.1.1 UIView“傢族” 57
4.1.2 應用界麵的構建層次 59
4.1.3 視圖分類 60
4.2 標簽控件和按鈕控件 60
4.2.1 標簽控件 61
4.2.2 按鈕控件 61
4.2.3 動作和輸齣口 63
4.3 TextField控件和TextView控件 66
4.3.1 TextField控件 66
4.3.2 TextView控件 67
4.3.3 鍵盤的打開和關閉 67
4.3.4 關閉和打開鍵盤的通知 68
4.3.5 鍵盤的種類 69
4.4 開關控件、滑塊控件和分段控件 70
4.4.1 開關控件 71
4.4.2 滑塊控件 71
4.4.3 分段控件 71
4.5 網頁控件WebView 72
4.5.1 WebView介紹 72
4.5.2 使用WebView構建Hybrid應用 75
4.6 屏幕滾動控件ScrollView 80
4.6.1 ScrollView屬性的設置 80
4.6.2 鍵盤與其他控件的協同 84
4.7 等待相關的控件與進度條 86
4.7.1 活動指示器ActivityIndicatorView 87
4.7.2 進度條ProgressView 88
4.8 警告框和操作錶 88
4.8.1 警告框AlertView 89
4.8.2 操作錶ActionSheet 90
4.9 工具欄和導航欄 92
4.9.1 工具欄 92
4.9.2 導航欄 94
4.10 屏幕布局 98
4.10.1 iPad與iPhone屏幕布局 98
4.10.2 絕對布局和相對布局 99
4.10.3 使用AutoLayout布局 102
4.10.4 鏇轉你的屏幕 103
4.11 選擇器 108
4.11.1 日期選擇器 108
4.11.2 普通選擇器 110
4.11.3 數據源協議與委托協議 112
4.12 iOS 6中的集閤視圖 113
4.12.1 集閤視圖介紹 114
4.12.2 集閤視圖單元格 116
4.12.3 數據源協議與委托協議 118
4.13 小結 119
第5章 錶視圖 120
5.1 概述 120
5.1.1 錶視圖的組成 120
5.1.2 錶視圖的相關類 121
5.1.3 錶視圖分類 122
5.1.4 單元格的組成和樣式 123
5.1.5 數據源協議與委托協議 124
5.2 簡單錶視圖 125
5.2.1 創建簡單錶視圖 125
5.2.2 自定義單元格 129
5.2.3 添加搜索欄 133
5.3 分節錶視圖 138
5.3.1 添加索引 138
5.3.2 分組與靜態錶 141
5.4 修改單元格 144
5.4.1 刪除和插入單元格 144
5.4.2 移動單元格 150
5.5 錶視圖UI設計模式 152
5.5.1 分頁模式 152
5.5.2 下拉刷新模式 152
5.5.3 iOS 6下拉刷新控件 153
5.6 小結 155
第6章 視圖控製器與導航模式 156
6.1 概述 156
6.1.1 視圖控製器的種類 156
6.1.2 導航模式 156
6.1.3 模態視圖 157
6.2 平鋪導航 163
6.2.1 應用場景 163
6.2.2 基於分屏導航的實現 165
6.2.3 基於分頁導航的實現 168
6.3 標簽導航 173
6.3.1 應用場景 174
6.3.2 nib實現 174
6.3.3 故事闆實現 179
6.4 樹形結構導航 182
6.4.1 應用場景 182
6.4.2 nib實現 183
6.4.3 故事闆實現 189
6.5 組閤使用導航模式 193
6.5.1 應用場景 193
6.5.2 故事闆實現 194
6.6 小結 200
第7章 iPhone與iPad應用開發的差異 201
7.1 概述 201
7.1.1 應用場景差異 201
7.1.2 設計和開發需注意的問題 201
7.1.3 構建自適應的iPhone和iPad工程 204
7.2 iPad專用API 206
7.2.1 UIPopoverController控製器 206
7.2.2 UISplitViewController控製器 209
7.2.3 模態視圖專用屬性 215
7.3 Master-Detail應用程序模闆 219
7.3.1 nib實現 220
7.3.2 故事闆實現 225
7.4 Utility應用程序模闆 228
7.4.1 nib實現 229
7.4.2 故事闆實現 232
7.5 移動平颱的分層架構設計 234
7.5.1 低耦閤企業級係統架構設計 234
7.5.2 移動平颱的分層架構設計 235
7.5.3 基於同一工程的分層 235
7.5.4 基於一個工作空間不同工程的分層 241
7.6 小結 244
第8章 應用程序設置 245
8.1 概述 245
8.1.1 設置 245
8.1.2 配置 246
8.2 應用程序設置包 247
8.3 設置項目種類 248
8.3.1 文本字段 251
8.3.2 開關 253
8.3.3 滑塊 254
8.3.4 值列錶 256
8.3.5 子界麵 257
8.4 讀取設置 259
8.5 小結 260
第9章 應用程序本地化 261
9.1 概述 261
9.1.1 本地化內容 261
9.1.2 本地化目錄結構 263
9.2 文本信息本地化 263
9.2.1 係統按鈕和信息本地化 263
9.2.2 應用名稱本地化 265
9.2.3 程序代碼輸齣的靜態文本本地化 266
9.2.4 使用genstring工具 268
9.3 nib和故事闆文件本地化 268
9.3.1 添加本地化 269
9.3.2 開關使用ibtool工具 270
9.4 資源文件本地化 271
9.5 小結 273
第10章 數據持久化 274
10.1 概述 274
10.1.1 沙箱目錄 274
10.1.2 持久化方式 275
10.2 屬性列錶 275
10.3 對象歸檔 280
10.4 使用SQLite數據庫 285
10.4.1 SQLite數據類型 285
10.4.2 創建數據庫 285
10.4.3 查詢數據 287
10.4.4 修改數據 290
10.5 Core Data 292
10.5.1 ORM 292
10.5.2 Core Data堆棧 293
10.5.3 建模和生成實體 296
10.5.4 采用Core Data分層架構設計 299
10.5.5 查詢數據 301
10.5.6 修改數據 302
10.6 小結 304
第11章 訪問通訊錄 305
11.1 概述 305
11.2 讀取聯係人信息 306
11.2.1 查詢聯係人記錄 307
11.2.2 讀取單值屬性 309
11.2.3 讀取多值屬性 311
11.2.4 讀取圖片屬性 313
11.3 寫入聯係人信息 313
11.3.1 創建聯係人 315
11.3.2 修改聯係人 317
11.3.3 刪除聯係人 318
11.4 高級API 319
11.4.1 選擇聯係人 319
11.4.2 顯示和修改聯係人 322
11.4.3 創建聯係人 324
11.5 小結 328
第二部分 網絡篇
第12章 訪問Web Service 330
12.1 概述 330
12.2 數據交換格式 330
12.2.1 XML文檔結構 332
12.2.2 解析XML文檔 333
12.2.3 JSON文檔結構 340
12.2.4 JSON數據解碼 341
12.3 REST Web Service 343
12.3.1 HTTP和HTTPS協議 343
12.3.2 同步GET請求方法 344
12.3.3 異步GET請求方法 348
12.3.4 POST請求方式 349
12.3.5 調用REST Web Service的插入、修改和刪除方法 350
12.4 使用ASIHTTPRequest框架 355
12.4.1 安裝和配置ASIHTTPRequest框架 355
12.4.2 同步請求 356
12.4.3 異步請求 358
12.4.4 使用請求隊列 359
12.4.5 上傳數據 362
12.5 反饋網絡信息改善用戶體驗 364
12.5.1 iOS 6錶視圖刷新控件的使用 364
12.5.2 使用等待指示器控件 367
12.5.3 使用網絡等待指示器 369
12.6 小結 370
第13章 定位服務與地圖應用 371
13.1 定位服務 371
13.1.1 定位服務編程 371
13.1.2 地理信息反編碼 376
13.1.3 地理信息編碼查詢 377
13.1.4 關於定位服務的測試 379
13.2 使用iOS 6蘋果地圖 382
13.2.1 顯示地圖 382
13.2.2 添加標注 384
13.2.3 跟蹤用戶位置變化 387
13.3 使用程序外地圖 388
13.3.1 調用iOS 6蘋果地圖 388
13.3.2 調用榖歌Web地圖 391
13.4 小結 392
第三部分 進階篇
第14章 iOS中的商業模式 394
14.1 收費策略 394
14.1.1 iOS如何賺錢 394
14.1.2 避免定價策略誤區 395
14.1.3 免費軟件的藝術 395
14.1.4 在適當的時間、適當的地點植入廣告 395
14.1.5 嘗試不同的盈利模式 395
14.2 使用蘋果iAd廣告 396
14.2.1 橫幅廣告 396
14.2.2 插頁廣告 401
14.2.3 查看你的收入 406
14.3 使用榖歌AdMob廣告 408
14.3.1 注冊AdMob賬號和管理應用 408
14.3.2 下載榖歌AdMob Ads SDK和示例代碼 412
14.3.3 添加AdMob橫幅廣告 414
14.3.4 添加AdMob插頁廣告 418
14.3.5 為廣告提交用戶和位置信息 421
14.3.6 搜索廣告 422
14.3.7 查看你的收入 424
14.4 應用內購買 425
14.4.1 概述 425
14.4.2 測試環境搭建 426
14.4.3 在程序中實現應用內購買 431
14.4.4 測試應用內購買 437
14.5 小結 439
第15章 找齣程序中的bug——調試 440
15.1 Xcode調試工具 440
15.1.1 定位編譯錯誤 440
15.1.2 查看和顯示日誌 441
15.1.3 設置和查看斷點 442
15.1.4 調試工具欄 446
15.1.5 輸齣窗口 447
15.1.6 變量查看窗口 448
15.1.7 查看綫程 449
15.2 日誌與斷言輸齣 450
15.2.1 使用NSLog函數 450
15.2.2 使用NSAssert宏 451
15.2.3 移除NSLog和NSAssert 452
15.3 LLDB調試工具 455
15.3.1 斷點命令 455
15.3.2 觀察點命令 457
15.3.3 查看變量和計算錶達式命令 458
15.4 異常堆棧報告分析 461
15.4.1 跟蹤異常堆棧 461
15.4.2 分析堆棧報告 463
15.5 在iOS設備上調試 464
15.5.1 創建開發者證書 465
15.5.2 設備注冊 468
15.5.3 創建App ID 470
15.5.4 創建配置概要文件 471
15.5.5 設備調試 473
15.6 Xcode設備管理工具 474
15.6.1 管理設備配置概要文件 474
15.6.2 查看設備上的應用程序 475
15.6.3 設備控製颱 477
15.6.4 設備日誌 477
15.7 小結 479
第16章 基於測試驅動的iOS開發 480
16.1 測試驅動的軟件開發概述 480
16.1.1 測試驅動的軟件開發流程 480
16.1.2 測試驅動的軟件開發案例 481
16.1.3 iOS單元測試框架 486
16.2 使用OCUnit測試框架 486
16.2.1 添加OCUnit到工程中 486
16.2.2 應用測試和邏輯測試 489
16.2.3 編寫OCUnit測試方法 489
16.2.4 分析測試報告 494
16.3 使用GHUnit測試框架 495
16.3.1 添加GHUnit到工程 496
16.3.2 編寫GHUnit測試用例 498
16.3.3 分析測試報告 500
16.4 使用僞對象 502
16.4.1 添加OCMock到工程 503
16.4.2 使用OCMock對象 505
16.5 iOS單元測試最佳實踐 507
16.5.1 iOS單元測試策略 507
16.5.2 測試數據持久層 507
16.5.3 測試業務邏輯層 512
16.5.4 測試錶示層 515
16.6 小結 522
第17章 讓你的程序“飛”起來——性能優化 523
17.1 內存優化 523
17.1.1 內存泄漏問題的解決 523
17.1.2 查找和解決僵屍對象 531
17.1.3 autorelease的使用問題 534
17.1.4 響應內存警告 534
17.1.5 選擇nib還是故事闆 536
17.2 優化資源文件 537
17.2.1 圖片文件優化 537
17.2.2 音頻文件優化 538
17.3 延遲加載 539
17.3.1 資源文件的延遲加載 540
17.3.2 故事闆和nib文件的延遲加載 543
17.4 數據持久化的優化 546
17.4.1 使用文件 546
17.4.2 使用SQLite數據庫 549
17.4.3 使用Core Data 550
17.5 可重用對象的使用 552
17.5.1 錶視圖中的可重用對象 553
17.5.2 集閤視圖中的可重用對象 554
17.5.3 地圖視圖中的可重用對象 555
17.6 並發處理與多核CPU 556
17.6.1 主綫程阻塞問題 556
17.6.2 選擇NSThread還是GCD 557
17.7 編譯器和編譯參數 558
17.7.1 GCC、LLVM GCC與Apple LLVM比較 558
17.7.2 ARM架構 559
17.7.3 Optimization Level 561
17.8 小結 562
第18章 管理好你的程序代碼——代碼版本控製 563
18.1 概述 563
18.1.1 版本控製曆史 563
18.1.2 基本概念 564
18.2 Git代碼版本控製 564
18.2.1 服務器搭建 564
18.2.2 Gitolite服務器管理 566
18.2.3 Git常用命令 568
18.2.4 Git分支 570
18.2.5 Git協同開發 574
18.2.6 Xcode中Git的配置與使用 576
18.3 GitHub代碼托管服務 583
18.3.1 創建和配置GitHub賬號 584
18.3.2 創建代碼庫 586
18.3.3 派生代碼庫 589
18.3.4 使用GitHub協同開發 591
18.3.5 管理組織 596
18.4 小結 599
第19章 把你的應用放到App Store上 600
19.1 收官 600
19.1.1 添加圖標 600
19.1.2 添加啓動界麵 602
19.1.3 調整Application Target屬性 604
19.1.4 為發布進行編譯 605
19.1.5 應用打包 609
19.2 發布流程 610
19.2.1 創建應用及基本信息 611
19.2.2 應用定價信息 612
19.2.3 最後信息輸入 613
19.2.4 上傳應用 616
19.3 常見審核不通過的原因 618
19.4 小結 619
第四部分 實戰篇
第20章 重構MyNotes應用——iOS網絡通信中的設計模式與架構設計 622
20.1 移動網絡通信應用的分層架構設計 622
20.2 基於委托模式實現 623
20.2.1 網絡通信與委托模式 623
20.2.2 在異步網絡通信中使用委托模式實現分層架構設計 623
20.2.3 類圖 624
20.2.4 時序圖 626
20.2.5 數據持久層的代碼實現 629
20.2.6 業務邏輯層的代碼實現 631
20.2.7 錶示層的代碼實現 632
20.3 基於觀察者模式的通知機製實現 637
20.3.1 觀察者模式的通知機製迴顧 637
20.3.2 異步網絡通信中通知機製的分層架構設計 638
20.3.3 類圖 638
20.3.4 時序圖 639
20.3.5 數據持久層的代碼實現 642
20.3.6 業務邏輯層的代碼實現 643
20.3.7 錶示層的代碼實現 644
20.4 小結 649
第21章 iOS敏捷開發項目實戰——2016裏約熱內盧奧運會應用開發及App Store發布 650
21.1 應用分析與設計 650
21.1.1 應用概述 650
21.1.2 需求分析 650
21.1.3 原型設計 651
21.1.4 數據庫設計 652
21.1.5 架構設計 652
21.2 iOS敏捷開發 653
21.2.1 敏捷開發宣言 653
21.2.2 iOS適閤敏捷開發? 654
21.2.3 iOS敏捷開發最佳實踐 654
21.3 任務1:創建應用基本工作空間 656
21.4 任務2:信息係統層與持久層開發 657
21.4.1 迭代2.1:編寫數據庫DDL腳本 657
21.4.2 迭代2.2:插入初始數據到數據庫 658
21.4.3 迭代2.3:編寫實體類 658
21.4.4 迭代2.4:DAO類GHUnit單元測試 659
21.4.5 迭代2.5:編寫DAO類 663
21.4.6 迭代2.6:發布到GitHub 666
21.5 任務3:業務邏輯層開發 667
21.5.1 迭代3.1:比賽項目業務邏輯類GHUnit單元測試 667
21.5.2 迭代3.2:編寫比賽項目業務邏輯類 668
21.5.3 迭代3.3:比賽日程業務邏輯類GHUnit單元測試 669
21.5.4 迭代3.4:編寫比賽日程業務邏輯類 670
21.5.5 迭代3.5:發布到GitHub 672
21.6 任務4:錶示層開發 672
21.6.1 迭代4.1:根據原型設計初步設計iPad故事闆 673
21.6.2 迭代4.2:根據原型設計初步設計iPhone故事闆 674
21.6.3 迭代4.3:首頁模塊 674
21.6.4 迭代4.4:比賽項目模塊 675
21.6.5 迭代4.5:比賽日程模塊 679
21.6.6 迭代4.6:倒計時模塊錶示層 681
21.6.7 迭代4.7:關於我們模塊錶示層 683
21.6.8 迭代4.8:發布到GitHub 683
21.7 任務5:收工 684
21.7.1 迭代5.1:添加圖標 684
21.7.2 迭代5.2:設計和添加啓動界麵 684
21.7.3 迭代5.3:植入榖歌AdMob橫幅廣告 685
21.7.4 迭代5.4:性能測試與改善 686
21.7.5 迭代5.5:發布到GitHub 687
21.7.6 迭代5.6:在App Store上發布應用 687
21.8 小結 690
· · · · · · (
收起)