編輯推薦
深度揭秘iOS 6高級特性與開發技巧
發掘實踐,藉鑒開發經驗,真正掌控iOS開發
移動開發進階必備,在平颱上打造非凡應用
具體如下:
首先,它是國內的ios 6圖書
第二:新增一章講解如何將數據上傳到雲端
第三:涵蓋瞭iOS 6的大部分新功能,包括集閤視圖和自動布局(第7章),還有一整章介紹自動引用計數。
第四:ios 6增加瞭關於調試(第19章)、性能調優(第20章)以及集閤視圖和自動布局(第7章)的新內容
《圖靈程序設計叢書:iOS 6編程實戰》適閤具有一定iOS 開發經驗,緻力於深入瞭解iOS 開發、實踐以及他人實際開發經驗的人學習參考。
內容簡介
iOS開發如日中天,iOS 6又為我們帶來瞭大量的高級特性,從事移動開發的你,還等什麼?
《圖靈程序設計叢書:iOS 6編程實戰》急開發者之所急,揭秘瞭多數開發類圖書未曾展示過的iOS 6高級特性和開發技巧,帶你深入瞭解iOS 6。作者結閤自己多年的實踐經驗,毫無保留、麵麵俱到地講解瞭如何充分利用強大的SDK將你的移動開發技能發揮到極點。全書涵蓋瞭安全、多任務處理、多平颱運行、塊與函數式編程、高級文本布局、性能調優,以及如何通過應用內購買功能提高銷售業績。
久經“殺場”的兩位作者Rob Napier和Mugunth Kumar在本書中分享瞭他們為蘋果移動設備開發“殺手級”應用的寶貴經驗。以下是《圖靈程序設計叢書:iOS 6編程實戰》部分精彩內容摘錄:
兼容iPhone 5充分利用集閤視圖
操作Objective-C運行時 性能調優和消除BUG
用Security Services確保數據安全 麵嚮REST式Web服務創建高性能應用
實現誘人的動畫效果 在網絡連接質量不一的情況下實現超快緩存
用Core Text打造精妙的文本布局 充分發揮Core Foundation的強大功能
作者簡介
Rob Napier,2005年開始從事Mac開發,iPhone SDK第一版發布時就開始開發iPhone應用。他是The Daily、PandoraBoy和Cisco Mobile的作者,Stack Overflow的主要貢獻者,並且維護著技術博客Cocoaphony,主要關注組網、性能、安全和MVC模式。他自建瞭三套房子,喜歡徒步旅行,還是一位自豪的父親。
Mugunth Kumar,新加坡獨立iOS開發者,擁有新加坡南洋理工大學碩士學位,主修信息係統。其個人博客(blog.mugunthkumar.com)主要發錶移動開發、軟件可用性、用戶體驗和iOS相關的文章。從事iOS開發前,他在財富500強企業通用電氣和霍尼韋爾擔任Windows和.NET平颱軟件顧問。他關注的領域包括編程方法論(麵嚮對象和函數式編程)、移動開發以及可用性設計。不寫代碼的時候,他會到國外拍攝一些大自然風景。
譯者簡介:
陳曉亮,iOS開發工程師,主要關注Linux、Mac和iOS,喜歡Lisp,也喜歡Objective-C。
武海峰,Linux係統工程師,主要關注GNU/Linux和移動互聯應用,熱衷於開源軟件。曾在商業Linux廠商和移動互聯網Startup任職,從事Android係統集成、商業Linux發行版集成及移動互聯網産品開發。
鄧強,高級軟件工程師,關注互聯網行業,對互聯網産品和技術有深厚興趣,Apple粉,Google粉,Amazon粉。目前就職於美國道富銀行杭州研發中心,從事金融行業軟件係統開發。
周慶成,互聯網與移動應用開發者,對iOS等移動係統擁有極大興趣,開發過iPad版三人鬥地主等遊戲,且對於各種係統平颱與編程語言都有研究。此外,他還翻譯瞭《Objective-C基礎教程(第2版)》。目前居於上海,從事遊戲與網絡應用開發。
內頁插圖
精彩書評
“我讀過另外3本iOS開發教程,卻仍然存有很多疑問。但這本不同。正如其‘前言’中所說,它真正‘讓你瞭解為什麼這麼做而不隻是局限於怎麼做’。”
“我看過本書上一版,因此這一版齣來後我毫不猶豫就將它放進瞭購物車。本書是iOS開發進階的基石。我將本書介紹給瞭公司內一些年輕的iOS開發者,他們對它給齣瞭一緻好評。”
——讀者評論
目錄
第一部分 全新功能
第1章 全新的係統
1.1 新功能
1.1.1 集閤視圖
1.1.2 自動布局
1.1.3 自動引用計數
1.1.4 應用內購買的托管內容
1.1.5 社交框架
1.1.6 UI狀態保留
1.1.7 其他新功能
1.2 小結
1.3 擴展閱讀
第2章 熟悉Xcode 4和LLVM編譯器
2.1 瞭解用戶界麵
2.1.1 標簽式編輯器
2.1.2 按鍵綁定的變化
2.1.3 工程設置編輯器
2.1.4 內置的版本控製係統
2.1.5 工作區
2.2 單窗口工作方式
2.3 導航麵闆
2.3.1 工程導航麵闆
2.3.2 符號導航麵闆
2.3.3 搜索導航麵闆
2.3.4 問題導航麵闆
2.3.5 調試導航麵闆
2.3.6 斷點導航麵闆
2.3.7 日誌導航麵闆
2.4 輔助功能
2.5 內置的Interface Builder
2.6 Xcode之核心:LLVM編譯器
2.6.1 Clang編譯器前端
2.6.2 我是一個Bug!修復我
2.7 LLVM 4的新功能
2.7.1 字麵量
2.7.2 字麵量和可用性檢查
2.7.3 實例變量的自動閤成
2.8 使用Git進行版本控製
2.8.1 內置的Git版本控製係統
2.8.2 版本編輯器
2.8.3 Git最佳實踐
2.9 Scheme
2.9.1 為什麼使用Scheme
2.9.2 建議用Scheme實現你的意圖
2.9.3 創建一個Scheme
2.9.4 共享你的Scheme
2.10 為編譯配置添加注釋
2.10.1 創建xcconfig文件
2.10.2 重構編譯配置文件
2.11 將代碼轉換為支持ARC的Objective-C代碼
2.12 Xcode 4 Organizer
2.12.1 Automatic Device Provisioning
2.12.2 查看崩潰日誌和控製颱輸齣
2.12.3 查看應用沙盒數據
2.12.4 管理版本庫
2.12.5 管理應用程序歸檔
2.12.6 查看Objective-C和SDK文檔
2.13 小結
2.14 擴展閱讀
2.14.1 蘋果文檔
2.14.2 WWDC講座
2.14.3 博客
2.14.4 網上資源
2.14.5 圖書
第二部分 熟能生巧
第3章 Objective-C基礎知識
3.1 命名約定
3.2 自動引用計數
3.3 屬性
3.3.1 屬性修飾關鍵字
3.3.2 屬性最佳實踐
3.3.3 私有實例變量
3.4 存取器
3.5 分類和擴展
3.5.1 +load方法
3.5.2 使用關聯引用為分類添加數據
3.5.3 類擴展
3.6 正式協議和非正式協議
3.7 小結
3.8 擴展閱讀
3.8.1 蘋果文檔
3.8.2 其他資源
第4章 Cocoa設計模式
4.1 理解模型·視圖·控製器
4.1.1 使用模型類
4.1.2 使用視圖類
4.1.3 使用控製器類
4.2 理解委托和數據源
4.3 使用命令模式
4.3.1 使用目標·動作
4.3.2 使用方法簽名和調用
4.3.3 使用蹦床
4.3.4 撤銷
4.4 使用觀察者模式
4.5 使用單例模式
4.6 小結
4.7 擴展閱讀
4.7.1 蘋果文檔
4.7.2 其他資源
第5章 通過Objective-C的ARC管理內存
5.1 Objective-C的ARC基礎入門
5.1.1 曆史簡介
5.1.2 手動引用計數與自動引用計數
5.2 什麼是ARC
5.2.1 在ARC工程中集成非ARC的第三方代碼
5.2.2 在非ARC工程中集成ARC代碼
5.2.3 框架中的ARC代碼
5.2.4 ARC空聲明變量
5.2.5 Objective-C命名約定
5.2.6 覆蓋默認行為
5.2.7 自由橋接
5.2.8 ARC內部原理
5.3 常見的ARC移植錯誤
5.4 小結
5.5 擴展閱讀
5.5.1 蘋果文檔
5.5.2 WWDC講座
5.5.3 博客
第6章 熟練使用錶視圖
6.1 UITableView類的繼承關係
6.2 熟悉錶視圖
6.2.1 UITableViewController
6.2.2 UITableViewCell
6.2.3 提高錶視圖的滾動速度
6.2.4 自定義非重復錶單元
6.2.5 錶視圖最佳方案:編寫簡潔代碼,簡化控製器內容
6.3 小結
6.4 擴展閱讀
6.4.1 蘋果文檔
6.4.2 其他資源
第7章 集閤視圖與自動布局
7.1 集閤視圖
7.1.1 類與協議
7.1.2 示例
7.2 自動布局
7.2.1 使用自動布局
7.2.2 瞭解自動布局
7.2.3 相對布局約束
7.2.4 視覺化格式語言
7.2.5 調試布局錯誤
7.3 小結
7.4 擴展閱讀
7.14.1 蘋果文檔
7.14.2 WWDC講座
第8章 繪圖功能
8.1 iOS的不同繪圖係統
8.2 UIKit和視圖繪圖周期
8.3 視圖繪製與視圖布局
8.4 自定義視圖繪製
8.4.1 通過UIKit繪圖
8.4.2 路徑
8.4.3 理解坐標係
8.4.4 重新調整大小以及內容模式
8.4.5 變形
8.4.6 通過Core Graphics進行繪製
8.4.7 混用UIKit與Core Graphics
8.4.8 管理圖形上下文
8.5 優化UIView繪製
8.5.1 避免繪圖
8.5.2 緩存與後颱繪製
8.5.3 自定義繪圖與預渲染
8.5.4 像素對齊與模糊文本
8.5.5 透明、不透明與隱藏
8.6 CGLayer
8.7 小結
8.8 擴展閱讀
8.8.1 蘋果文檔
8.8.2 其他資源
第9章 Core Animation
9.1 視圖動畫
9.2 管理用戶交互
9.3 圖層繪製
9.3.1 直接設置內容
9.3.2 實現display方法
9.3.3 自定義繪圖
9.3.4 在自己的上下文中繪圖
9.4 移動對象
9.4.1 隱式動畫
9.4.2 顯式動畫
9.4.3 模型與錶示
9.4.4 關於定時
9.5 三維動畫
9.6 美化圖層
9.7 用動作實現自動動畫
9.8 為自定義屬性添加動畫
9.9 Core Animation與綫程
9.10 小結
9.11 擴展閱讀
9.11.1 蘋果文檔
9.11.2 其他資源
第10章 錯誤處理
10.1 錯誤處理模式
10.2 斷言
10.3 異常
10.4 捕獲與報告程序崩潰
10.5 錯誤和NSError
10.6 錯誤處理塊
10.7 日誌
10.7.1 記錄敏感信息
10.7.2 獲取日誌文件
10.8 小結
10.9 擴展閱讀
10.9.1 蘋果文檔
10.9.2 其他資源
第11章 位置服務
11.1 Core Location框架
11.1.1 獲取用戶位置
11.1.2 使用內置的羅盤獲取用戶前進方嚮
11.1.3 位置服務和用戶隱私
11.2 後颱位置服務
11.2.1 後颱獲取位置更新
11.2.2 顯著位置變更通知
11.2.3 區域監控(地理圍欄)
11.3 位置模擬
11.4 時刻關注電量消耗
11.5 小結
11.6 擴展閱讀
第三部分 選擇工具
第12章 錶視圖常用UI範例
12.1 下拉刷新
12.2 無限滾動
12.3 行內編輯與鍵盤
12.4 UITableView的動畫效果
12.5 錶視圖動畫的實際應用
12.5.1 實現摺疊列錶
12.5.2 實現選項抽屜
12.5.3 在錶視圖單元格中使用手勢識彆器
12.6 小結
12.7 擴展閱讀
第13章 多任務
13.1 後颱運行最佳實踐:能力越大責任越大
13.2 狀態恢復係統
13.2.1 測試狀態恢復係統
13.2.2 選擇性加入
13.2.3 應用啓動過程的變化
13.2.4 狀態恢復標識符
13.2.5 狀態編碼器與狀態解碼器
13.2.6 錶視圖和集閤視圖
13.2.7 狀態恢復係統的高級應用
13.3 多任務和運行循環簡介
13.4 以操作為中心的多任務開發
13.5 用GCD實現多任務
13.5.1 GCD和ARC
13.5.2 源和定時器
13.5.3 用分派屏障創建同步點
13.5.4 隊列目標和優先級
13.5.5 分派組
13.5.6 隊列關聯數據
13.5.7 分派數據
13.6 小結
13.7 擴展閱讀
13.7.1 蘋果文檔
13.7.2 WWDC講座
13.7.3 其他資源
第14章 REST解惑
14.1 REST簡介
14.2 選擇數據交換格式
14.2.1 在iOS中解析XML
14.2.2 在iOS中解析JSON
14.2.3 XML與JSON
14.2.4 模型版本化
14.3 假想的Web服務
14.4 重要提醒
14.5 RESTfulEngine架構(iHotelApp示例代碼)
14.5.1 NSURLConnection與第三方框架
14.5.2 創建RESTfulEngine
14.5.3 使用訪問令牌對API調用進行認證
14.5.4 在RESTfulEngine.m中覆蓋相關方法以添加自定義認證頭部
14.5.5 取消請求
14.5.6 請求響應
14.5.7 對JSON數據進行鍵值編碼
14.5.8 列錶頁麵的JSON對象與詳細頁麵的JSON對象
14.5.9 嵌套JSON對象
14.5.10 少即是多
14.5.11 錯誤處理
14.5.12 本地化
14.5.13 使用分類處理其他格式
14.5.14 在iOS中提升性能的小技巧
14.6 小結
14.7 擴展閱讀
14.7.1 蘋果文檔
14.7.2 其他資源
第15章 通過安全服務鞏固係統安全
15.1 理解iOS沙盒
15.2 保證網絡通信的安全
15.2.1 證書工作原理
15.2.2 檢驗證書的有效性
15.2.3 判斷證書的可信度
15.3 使用文件保護
15.4 使用鑰匙串
15.5 使用加密
15.5.1 AES概要
15.5.2 使用PBKDF2將密碼轉換成密鑰
15.5.3 AES模式和填充
15.5.4 初始化嚮量
15.5.5 使用HMAC進行認證
15.5.6 錯誤的密碼
15.5.7 進行單槽加密
15.5.8 提高CommonCrypto的性能
15.5.9 組閤使用加密和壓縮
15.6 小結
15.7 擴展閱讀
15.7.1 蘋果文檔
15.7.2 WWDC講座
15.7.3 其他資源
第16章 在多個蘋果平颱和蘋果設備上運行應用
16.1 開發多平颱應用
16.1.1 可配置的目標設置:Base SDK和Deployment Target
16.1.2 支持多個SDK時的注意事項:框架、類和方法
16.1.3 檢查框架、類和方法的可用性
16.2 檢測設備的功能
16.2.1 檢測設備及判斷功能
16.2.2 檢測硬件和傳感器
16.3 應用內發送Email和短信
16.4 檢查多任務支持
16.5 支持iPhone 5
16.6 UIRequiredDeviceCapabilities
16.7 小結
16.8 擴展閱讀
16.8.1 蘋果文檔
16.8.2 其他資源
第17章 國際化和本地化
17.1 什麼是本地化
17.2 本地化字符串
17.3 對未本地化的字符串進行審查
17.4 格式化數字和日期
17.5 nib文件和Base Internationalization
17.6 本地化復雜字符串
17.7 小結
17.8 擴展閱讀
17.8.1 蘋果文檔
17.8.2 WWDC講座
第18章 通過應用內購買提高銷售業績
18.1 開始之前
18.2 應用內購買什麼
18.2.1 禁止通過應用內購買齣售的産品
18.2.2 重新思考你的商業模式
18.3 在iTunes Connect上設置産品配置
18.3.1 第一步:為你的應用創建一個新的App ID
18.3.2 第二步:生成配置文件
18.3.3 第三步:創建應用的産品項
18.3.4 第四步:創建應用內購買産品項
18.3.5 第五步:生成共享密鑰
18.3.6 第六步:創建測試賬戶
18.3.7 第七步:創建托管內容
18.4 實現應用內購買
18.5 MKStoreKit簡介
18.5.1 為什麼要用MKStoreKit
18.5.2 MKStoreKit的設計
18.5.3 定製MKStoreKit
18.6 實現購買
18.7 下載托管內容
18.8 測試代碼
18.9 排錯
18.9.1 無效的産品ID
18.9.2 無法連接iTunes Store
18.9.3 你已經購買瞭該産品,但它尚未下載
18.10 小結
18.11 擴展閱讀
18.11.1 蘋果文檔
18.11.2 博客
18.11.3 其他資源
第19章 調試
19.1 LLDB
19.2 使用LLDB進行調試
19.2.1 dSYM文件
19.2.2 符號化
19.3 斷點
19.4 觀察點
19.5 LLDB控製颱
19.6 NSZombieEnabled標誌
19.7 不同的崩潰類型
19.7.1 EXC_BAD_ACCESS
19.7.2 SIGSEGV
19.7.3 SIGBUS
19.7.4 SIGTRAP
19.7.5 EXC_ARITHMETIC
19.7.6 SIGILL
19.7.7 SIGABRT
19.7.8 看門狗超時
19.7.9 自定義錯誤信號處理程序
19.8 收集崩潰報告
19.9 第三方崩潰報告服務
19.10 小結
19.11 擴展閱讀
19.11.1 蘋果文檔
19.11.2 WWDC講座
19.11.3 其他資源
第20章 性能調優
20.1 性能思維模式
20.1.1 指導方針一:産品是為瞭取悅用戶纔存在的
20.1.2 指導方針二:設備是為瞭方便用戶而存在的
20.1.3 指導方針三:做到極緻
20.1.4 指導方針四:用戶的感知纔是實際的
20.1.5 指導方針五:關注能帶來大收益的方麵
20.2 歡迎走入Instruments的世界
20.3 查找內存問題
20.4 查找CPU問題
20.4.1 Accelerate框架
20.4.2 GLKit
20.5 繪圖性能
20.6 優化磁盤訪問和網絡訪問
20.7 小結
20.8 擴展閱讀
20.8.1 蘋果文檔
20.8.2 其他資源
第四部分 超越極限
第21章 故事闆及自定義切換效果
21.1 初識故事闆
21.1.1 實例化故事闆
21.1.2 加載故事闆中的視圖控製器
21.1.3 聯綫
21.1.4 使用故事闆來實現錶視圖
21.2 自定義切換效果
21.2.1 還有一個優點
21.2.2 白璧微瑕
21.3 使用UIAppearance協議自定義視圖
21.4 小結
21.5 擴展閱讀
21.5.1 蘋果文檔
21.5.2 WWDC講座
21.5.3 其他資源
第22章 Cocoa的大招:鍵值編碼和觀察
22.1 鍵值編碼
22.1.1 用KVC賦值
22.1.2 用鍵路徑遍曆屬性
22.1.3 KVC和容器類
22.1.4 KVC和字典
22.1.5 KVC和非對象
22.1.6 用KVC實現高階消息傳遞
22.1.7 容器操作符
22.2 鍵值觀察
22.2.1 KVO和容器類
22.2.2 KVO是如何實現的
22.3 KVO的權衡
22.4 小結
22.5 擴展閱讀
22.5.1 蘋果文檔
22.5.2 其他資源
第23章 不同凡想:塊和函數式編程
23.1 什麼是塊
23.1.1 為什麼要用函數式編程
23.1.2 “函數式”UIAlertView
23.2 聲明塊
23.2.1 變量作用域
23.2.2 棧與堆
23.3 實現塊
23.4 塊和並發
23.4.1 GCD中的分派隊列
23.4.2 NSOperationQueue與GCD分派隊列
23.5 基於塊的Cocoa方法
23.5.1 UIView的動畫使用塊
23.5.2 展示和移除視圖控製器
23.5.3 TweetComposer 與應用程序中發送郵件(短信)
23.5.4 用NSDictionary的enum erationWithBlock遍曆字典
23.5.5 尋找基於塊的方法
23.6 支持情況
23.7 小結
23.8 擴展閱讀
23.8.1 蘋果文檔
23.8.2 博客
23.8.3 其他資源
第24章 離綫支持
24.1 需要離綫支持的原因
24.2 緩存策略
24.2.1 存儲緩存
24.2.2 緩存版本和失效
24.3 數據模型緩存
24.4 緩存版本控製
24.5 創建內存緩存
24.5.1 為AppCache設計內存緩存
24.5.2 處理內存警告
24.5.3 處理結束和進入後颱通知
24.6 創建URL緩存
24.6.1 過期模型
24.6.2 驗證模型
24.6.3 示例
24.6.4 用URL緩存來緩存圖片
24.7 小結
24.8 擴展閱讀
24.8.1 蘋果文檔
24.8.2 書籍
24.8.3 其他資源
第25章 雲端數據
25.1 iCloud
25.2 第三方雲服務提供商
25.3 Parse
25.3.1 Parse入門
25.3.2 Parse的頂層對象
25.3.3 代碼
25.4 StackMob
25.4.1 設置StackMob
25.4.2 登錄、上傳和獲取數據
25.4.3 StackMob自定義代碼
25.5 後端即服務的缺點
25.6 小結
25.7 擴展閱讀
25.7.1 蘋果文檔
25.7.2 WWDC講座
25.7.3 其他資源
第26章 精妙的文本布局
26.1 基本控件:字段、視圖和標簽
26.2 UIKit中的富文本
26.2.1 理解粗體、斜體和下劃綫
26.2.2 屬性化字符串
26.2.3 段落樣式
26.2.4 屬性化字符串和HTML
26.3 用Web視圖顯示富文本
26.3.1 在Web視圖中顯示和訪問HTML
26.3.2 響應用戶交互
26.3.3 在滾動視圖和錶格視圖中繪製Web視圖
26.4 Core Text
26.4.1 用CTFramesetter進行簡單的布局
26.4.2 為非連續路徑創建框架
26.4.3 排版器、文本行、連續文本和字形
26.4.4 沿著麯綫繪製文本
26.5 小結
26.6 擴展閱讀
26.6.1 蘋果文檔
26.6.2 WWDC講座
26.6.3 其他資源
第27章 創建Core Foundation應用
27.1 Core Foundation類型
27.2 命名和內存管理
27.3 分配器
27.4 內省
27.5 字符串和數據
27.5.1 常量字符串
27.5.2 創建字符串
27.5.3 轉換為C字符串
27.5.4 其他字符串操作符
27.5.5 字符串的支持存儲
27.5.6 CFData
27.6 容器類型
27.6.1 CFArray
27.6.2 CFDictionary
27.6.3 CFSet和CFBag
27.6.4 其他容器類型
27.6.5 迴調函數
27.7 自由橋接
27.8 小結
27.9 擴展閱讀
27.9.1 蘋果文檔
27.9.2 其他資源
第28章 深度解析Objective-C
28.1 理解類和對象
28.2 使用方法和屬性
28.3 消息傳遞如何工作
28.3.1 動態實現
28.3.2 快速轉發
28.3.3 普通轉發
28.3.4 轉發失敗
28.3.5 各種版本的objc_msgSend
28.4 方法混寫
28.5 ISA混寫
28.6 方法混寫與ISA混寫
28.7 小結
28.8 擴展閱讀
28.8.1 蘋果文檔
28.8.2 其他資源
索引
前言/序言
蘋果操作係統曆來都是一個麵嚮用戶的版本,一個麵嚮開發者的版本,這樣交替著發布。iOS 6更多關注用戶,具有全新的地圖界麵和導航功能,社交網絡特性更是隨處可見。Pass Kit更以一種全新的方式將iPhone與日常生活聯係到瞭一起。增強的Siri功能使iPhone 4S更具吸引力。但願用戶能快一點升級。
這都是好消息,因為iOS 6同樣也令開發人員興奮不已。很多事物變得更加簡單,集閤視圖與自動布局可以簡化UI設計,UIKit添加瞭對富文本的支持。當你的應用進入後颱,狀態保留可以更加容易記錄它們的進度。很多過去復雜麻煩的東西開始變得簡單瞭。
如果你準備好瞭去探索最新的蘋果係統,從而把你的應用提升到新高度,那這本書就是你應該看的。
讀者對象
這並不是一本入門書。其他一些書會教你Objective-C並一步步指導你學習Interface Builder,不過本書假定你已經擁有一些iOS開發經驗;可能是自學的,或者上過培訓班。總之,你有能力寫程序,甚至已經有應用上架瞭。如果你打算學習更深入的內容、最佳實踐,以及作者源自真實工程的開發經驗,那你就找對書瞭。
這本書並不是示例的簡單堆砌,它包含大量代碼,不過主綫還是圍繞如何設計、編寫和維護優秀的iOS應用展開。本書會讓你瞭解為什麼這麼做而不隻是局限於怎麼做。你會學到很多關於設計模式、編寫可重用代碼,以及語法與新框架的知識。
本書內容
iOS平颱總是嚮前發展,本書也一樣。書中大部分示例需要至少iOS 5纔能運行,有些需要iOS 6。所有的示例都啓用瞭自動引用計數、自動屬性閤成和對象字麵量。除瞭很少幾處外,本書不會討論嚮後兼容。如果你的代碼過於龐大必須要嚮後兼容,你可能知道如何處理。本書主旨是通過最好的特性來創造最佳應用。
雖然本書主要針對iPhone 4、iPad 2之後的設備,但大部分內容也適用於第一代iPad、iPod touch、iPhone 3GS以及Apple TV。第16章還會專門討論如何處理各個平颱之間的差異。
新版內容
這一版涵蓋瞭iOS 6的大部分新功能,包括集閤視圖和自動布局(第7章),還有一整章介紹自動引用計數。本書新增一章講解如何將數據上傳到雲端,介紹瞭一些第三方BaaS(Backend as a Service,後端即服務)。本書還擴展瞭iOS相關的內容,主要涵蓋改進後的LLVM編譯器與調試器。為此,我們增加瞭第2章LLVM一節的篇幅,針對如何使用它寫齣下一代應用講解瞭LLVM的重要特性。它還添加瞭一章(第19章)專門介紹LLDB調試,包括Python腳本、寄存器布局和讀取寄存器等一些有助於解決調試難題的高級技巧。這一章還提到瞭otool、atos等可以輔助調試的命令行工具。最後,第20章展示瞭如何圍繞CPU性能、內存占用、網絡帶寬以及電池使用進行優化。
即便你有本書的上一版,關於調試(第19章)、性能調優(第20章)以及集閤視圖和自動布局(第7章)的新內容也足夠成為你買下這一版的理由瞭。
本書結構
iOS提供瞭非常豐富的工具,既有UIKit這樣的高層框架,也有Core Text這樣的低層框架。有時候,同一個目標可以通過多種方式來達成。作為開發人員,如何找到最正確的工具呢?
本書既考慮瞭日常開發需求,也考慮瞭特定的用途,能夠幫你作齣正確的選擇。學完本書,你會明白每個框架存在的價值、框架之間的相互關係,以及什麼時候選擇哪一個。最終,你會知道哪個框架最適閤解決哪一類問題。
本書分4部分,從最常用的工具一直講到最強大的工具。這一版新增的章會在前麵用“更新”字樣標識齣來。
第一部分:新功能
如果你對iOS 5很熟悉,這一部分可以帶你快速瞭解iOS 6的新功能。
· (更新)第1章“全新的係統”。iOS 6增加瞭大量新功能,在這裏你將快速瞭解它們。
· (更新)第2章“熟悉Xcode 4與LLVM編譯器”。Xocde是一個龐大的IDE,很多功能並不顯而易見。無論你是新手還是上一版的讀者,這一章都會幫助你瞭解它強大(也有令人沮喪)的工具。
第二部分:熟能生巧
作為一名iOS開發人員,你應該掌握很多常用工具,比如錶視圖通知和動畫圖層。不過要想發揮它們的全部潛力,就要熟悉它們。在這一部分,我們將學到Cocoa開發的最佳實踐。
· 第3章“Objective-C基礎知識”。如果你想在Objective-C開發方麵更上一層樓,這一章將引導你學習一些改善應用設計、穩定性和可重用性的常用工具。
· 第4章“Cocoa設計模式”。Cocoa建立於大量常用的設計模式之上。這一章會介紹相關的設計模式和蘋果用它們來解決問題的思路。
· (新增)第5章“通過Objective-C的ARC管理內存”。自動引用計數根本改變瞭iOS開發者的工作方式。大部分轉換也很容易,移植代碼時可能會齣現一些微妙的問題。本章討論如何避開問題和充分利用這個強大的技術。
· 第6章“熟練使用錶視圖”。錶視圖可能是iOS中最復雜但也最常用的UI元素瞭。它們的設計非常簡單優雅,但不瞭解原理卻很難用好。這一章將為你講清楚如何正確使用它們,以及如何解決無限滾動等問題。
· (新增)第7章“集閤視圖與自動布局”。WWDC 2012中展示的UICollectionView令世人矚目。到目前為止,UITableView仍然壟斷著iOS應用的界麵。不過當開發人員慢慢習慣新控件後,這個局麵很可能在iOS 6時代被改變。加上OS X中基於約束(constraint-base)的布局,實現復雜而美觀的界麵突然變得簡單起來。這一章的內容就是這些。
· 第8章“繪圖功能”。很多新開發者都對自定義繪圖退避三捨,但它卻是快速創建美觀用戶界麵的關鍵。這一章將探究UIKit和Core Graphics中有關繪圖的功能,告訴大傢怎麼纔能做到既快且美。
· 第9章“Core Animation”。iOS設備對動畫的支持是無與倫比的。藉助強大的GPU和高度優化的Core Animation,你可以創建直觀又吸引人的界麵。在這一章中,我們會介紹一些基礎知識以及動畫的原理。
· 第10章“錯誤處理”。你總想寫齣完美的代碼,不過每每又事與願違。如何應對意外是優秀應用與一般應用的分水嶺。這一章會告訴你常用的錯誤處理技巧、如何記錄錯誤,以及如何讓代碼在齣錯時錶現得更加靈活。
· (新增)第11章“位置服務”。許多應用都需要知道用戶在什麼地方。iOS使一切變得簡單,但也要警惕不要把電量耗盡。這一章我們講一講如何平衡功能與效率,同時給予用戶最佳體驗。
第三部分:選擇工具
有些工具幾乎時刻都要用,而有些工具則隻有特定的時候纔有用。在這一部分中,你會學到這些較為特殊的工具以及相關的技術。
· (新增)第12章“錶視圖常用UI範例”。與集閤視圖一樣令人欲罷不能的是錶視圖,它一直是iOS開發的中堅力量。這一章介紹如何使用高級錶視圖的無限滾動視圖和其他高級主題。
· (更新)第13章“多任務”。多任務是許多應用程序的重要部分,這一章將介紹如何在應用程序運行時或在後颱時執行多任務。iOS 6新的狀態保留係統使這一切更加容易,這一章還會介紹一些常見用例。
· (更新)第14章“REST解惑”。基於REST的服務是現代應用程序的核心,這一章將教會你在iOS中最好地實現它們。
· (更新)第15章“通過安全服務鞏固係統安全”。用戶安全和保護隱私永遠是第一位的。這一章會介紹如何通過鑰匙串、證書和密碼保護應用和用戶數據不會被盜用。
· 第16章“在多個蘋果平颱和蘋果設備上運行應用”。iOS傢族人丁興旺,不僅有瞭iPod touch、iPhone、iPad、Apple TV,而且新機型仍會不斷湧現。目前還無法一次編寫隨處運行。為瞭保證應用在任何平颱上都錶現卓越,本章將討論如何基於硬件和平颱調整應用。
· 第17章“國際化和本地化”。雖然你現在可能隻想關注某個國傢的市場,但讓應用明天能夠順利走嚮世界也隻需做一點點工作。本章會告訴你如何不影響當前開發,又能減少未來的麻煩和成本。
· 第18章“通過應用內購買提高銷售業績”。應用內購買對於很多程序員來說仍然是陌生領域。用戶喜歡額外內容,而開發人員喜歡額外收入。這一章告訴你在應用中把這一功能變為現實的最佳方法。
· (新增)第19章“調試”。要是每個應用第一次就能完美運行該有多好。幸運的是,Xcode和LLDB提供瞭很多能幫助你抓住“狡猾”bug的工具。你會學到很多高級的內容,瞭解實際開發中如何處理錯誤。
· (全新)第20章“性能調優”。高性能可以讓應用脫穎而齣。優化CPU和內存性能非常重要,不過你也需要優化電池以及網絡使用。蘋果公司提供瞭Instruments這個強大的工具來解決這些問題。你會學到如何使用Instruments查找瓶頸,以及如何在找到問題後改善性能。
第四部分:超越極限
這一部分是全書最精彩的內容。你已經學到瞭基礎知識,掌握瞭基本技能,現在該使用高級工具來超越極限瞭。這一部分將帶你深入瞭解iOS。
· (新增)第21章“故事闆及自定義切換效果”。故事闆仍然會使一些熟悉Nib文件的開發人員感到費解。你在這裏將會學到如何使用故事闆來提升應用。
· 第22章“Cocoa的大招:鍵值編碼和觀察”。蘋果的許多強大框架都是依靠KVO(Key-Value Observing)來維護性能和靈活性的。你會學到如何利用靈活性和KVO的速度。
· 第23章“不同凡響:塊和函數式編程”。許多開發人員依然對Objective-C的塊感到好奇。塊可以用來與蘋果框架交互,不過也開啓瞭編程新思路。接受一種新風格,並在你的下一個工程中將它的優勢錶現齣來吧。
· 第24章“離綫支持”。網絡編程很睏難,不過更難的是支持無縫離綫功能。學習如何最佳地緩存數據並將其集成到你的網絡引擎上是這一章的重點。
· (新增)第25章“雲端數據”。開發人員依然在適應新的iCloud服務。支持的話可以快速讓你的應用程序引入注目。本章中你將學習這個強大的係統。
· (更新)第26章“精妙的文本布局”。從UIKit到Core Text,iOS為顯示文本提供瞭充足的功能。iOS又在UIKit中添加瞭富文本支持。在這一章,你會學到如何使用屬性化字符串、Web視圖,以及用Core Text來處理最棘手的布局問題。
· 第27章“創建Core Foundation應用”。說到iOS中最強大的框架,你能想到的Core框架可能會有Core Graphics、Core Animation、Core Text,但它們都是基於Core Foundation框架的。在這一章中,我們學習如何使用Core Foundation數據類型,以便充分利用iOS提供的功能。
· 第28章“深度解析Objective-C”。這一章緻力於揭開Objective-C背後的秘密,包括如何使用Ojective-C運行時直接動態地修改類和方法、如何通過Objective-C函數調用C方法,以及如何通過係統來擴展程序。
以上各章可以跳讀,除瞭需要Core Foundation數據對象(特彆是Core Graphics、Core Animation和Core Text)的幾章,其他章都是相互獨立的。關於Core Foundation的內容,最終會歸總到第27章“創建Core Foundation應用”。
閱讀條件
本書所有示例都是用Mac OS X 10.8上的Xcode 4.5以及iOS 6開發的。你需要一個蘋果開發人員賬戶來訪問大部分工具和文檔,並且需要一個開發人員許可證來運行iOS設備上的應用程序。對此,請參考並注冊賬號。
本書中大部分示例可以在Xcode 4.5的iOS模擬器中運行。使用iOS模擬器就不需要蘋果開發人員許可證瞭。
蘋果文檔
蘋果公司在自己的網站上和Xcode中提供瞭大量文檔。這些文檔的URL地址變動很頻繁而且非常長。本書會使用標題而不是URL來引用這些文檔。如果想在Xcode中尋找文檔,請按下Cmd-Option-·快捷鍵或點擊Help->Docuentation and API Reference。在Documentation Organizer窗口中點擊搜索圖標,輸入文檔的標題,並從搜索結果中選擇文檔。可以參考圖1中搜索Coding Guidelines for Cocoa的示例。
圖1 搜索Coding Guidelines for Cocoa
如果想在蘋果官方網站查找文檔,可以訪問http://developer.apple.com,點擊Member Center,並登錄。選擇iOS Dev Center,並在搜索框中輸入文檔的標題。
在綫文檔與Xcode文檔是相同的。你可能會接收到iOS和Mac兩個平颱的結果,請閱讀iOS版。很多iOS文檔是Mac版的副本並且偶爾會包含iOS不支持的函數調用或常量。本書會告訴你哪些功能在iOS上可用。
源代碼
在學習本書示例的時候,可以手工輸入代碼,也可以使用本書附帶的源代碼文件。本書所有的源代碼可以在網站上下載得到。 下載之後,在第26章文件夾SimpleLayout工程的CoreTextLabel.m文件中可以看到如下代碼:
CoreTextLabel.m(SimpleLayout)
- (id)initWithFrame:(CGRect)frame {
if ((self = [super initWithFrame:frame])) {
CGAffineTransform
transform = CGAffineTransformMakeScale(1, -1);
CGAffineTransformTranslate(transform,
0, -self.bounds.size.height);
self.transform = transform;
self.backgroundColor = [UIColor whiteColor];
}
return self;
}
本書中有些代碼片段並不完整,其目的隻是為瞭輔助上下文說明問題。要想查看完整代碼,就需要參考下載到的源代碼。
勘誤
雖然我們已經盡瞭最大努力,但錯誤在所難免。有些是輸入錯誤,有些可能是我們理解上有偏差,有些可能是因為內容有變化。為瞭確保代碼與時俱進,請參考網站上的最新版本,以及博客中的相關文章。
緻謝
在去年投入大量時間撰寫針對iOS 5的本書上一版之後,今年又著手撰寫針對iOS 6的這個新版本,對此Rob非常感謝自己傢人的耐心。Mugunth感謝父母和朋友的支持。感謝Wiley齣版社,尤是Craig Smith和Ellie Scott,在他們不懈的支持、鼓勵下本書纔得以問世。感謝Jay Thrash熱心的技術審校,還有Tom Dinse對文字的潤色。感謝WWDC的蘋果工程師們容忍我們無窮無盡的疑問、追尋,還有偶爾的抱怨。特彆感謝史蒂夫·喬布斯,他畢生緻力於改變世界。人們不會忘記他。