內容簡介
本書聚焦在APP“產品”的設計、開發和運營層面,特彆強調架構和設計模式的重要性,有意識地將設計模式套用到代碼的編寫中,重點介紹iOS企業級套用開發的設計思維方式,並與全棧開發技術結合起來。 全書分為iOS基礎篇、Web與Native混合開發模式篇和全棧開發技術篇。iOS基礎篇主要介紹iOS基礎知識、多種設計模式下的視圖控制器之間的傳值、App與伺服器接口的定義、CollectionView的套用;Web與Native混合開發模式篇主要介紹Block的套用、iOS網路請求、JavaScript基礎、Web與Native的互動;全棧開發技術篇主要介紹Node.js、Express、AngularJS、MongoDB、MEAN全棧技術的實現。
作者簡介
和凌志,客座教授,工信部人才交流中心認證講師;擁有十多年移動網際網路開發經驗,先後在 Siemens Mobile、 Flextronics 等歐美公司擔任手機軟體架構師。2014年, 為北京高校錄製慕課“iOS企業級套用開發技術”。近幾年,專注於全棧技術開發, 代表產品有“點時”APP ――輕量級知識分享平台。
圖書目錄
iOS基礎篇
第1章 iOS基礎知識 2
1.1 Objective-C語法簡介 2
1.1.1 Objective-C的奇特之處 2
1.1.2 如何聲明一個實例變數 4
1.1.3 Objective-C字元串 5
1.2 Objective-C的對象類型與基本數據類型 6
1.2.1 對象類型與基本數據類型的混合使用 6
1.2.2 對象類型與基本數據類型的轉換 7
1.3 不可變數組與可變數組 7
1.3.1 不可變數組(NSArray)的特徵 8
1.3.2 可變數組(NSMutableArray)的特徵 8
1.3.3 如何遍歷數組中的對象 8
1.3.4 NSArray與NSMutableArray的套用 10
1.4 不可變字典與可變字典 11
1.4.1 不可變字典(NSDictionary) 11
1.4.2 可變字典(NSMutableDictionary) 12
1.4.3 如何遍歷字典中的對象 12
1.4.4 NSArray與NSDictionary的套用 13
1.4.5 創建類的對象 13
1.5 iOS應用程式概述 14
1.5.1 應用程式的入口 14
1.5.2 應用程式委託(AppDelegate) 14
1.5.3 UIApplication套用場景 15
1.5.4 一種簡單的永久數據存儲方式 16
1.6 iOS定製化控制項 17
1.6.1 定製化View的創建 17
1.6.2 小標籤(UILabel),大用場 19
1.6.3 如何實現輸入框隨鍵盤上移 20
1.7 視圖的層級管理 23
1.7.1 創建視圖的方法 23
1.7.2 如何從父視圖中移除子視圖 25
1.7.3 登錄頁面的實現 26
1.8 iOS編程規範 28
1.8.1 代碼的可維護性 29
1.8.2 面向對象的編程思想 29
1.8.3 優先編寫輕量級的ViewController 30
1.9 小結 31
第2章 視圖控制器之間的傳值 32
2.1 通過Delegate實現ViewController之間的傳值 32
2.1.1 Delegate概述 32
2.1.2 學習Delegate的困惑 32
2.1.3 從一道經典的面試題說起 33
2.1.4 學習Delegate常出現的幾個誤區 33
2.1.5 Delegate技術難點在哪裡 34
2.1.6 數據逆向傳送一定要通過Delegate嗎 34
2.1.7 Delegate套用五步曲 35
2.1.8 Delegate優勢 38
2.2 通過單例實現ViewController之間的傳值 38
2.2.1 單例的創建 39
2.2.2 單例的初始化 40
2.2.3 單例設計模式的本質 41
2.2.4 通過單例實現傳值 41
2.2.5 單例模式在登錄模組中的套用 42
2.2.6 單例模式的優勢 44
2.3 通過KVO實現ViewController之間的傳值 44
2.3.1 什麼是KVC 44
2.3.2 什麼是KVO 45
2.3.3 KVO的特點 46
2.3.4 使用KVO的步驟 46
2.3.5 KVO的實現方法 46
2.3.6 KVO套用注意事項 50
2.4 通過NSNotification實現ViewController之間的傳值 50
2.4.1 NSNotification的定義 51
2.4.2 NSNotificationCenter 51
2.4.3 發出通知 51
2.4.4 接收通知 52
2.4.5 移除通知 52
2.4.6 異步模式下的通知操作 53
2.4.7 通過NSNotification實現ViewController之間的傳值 53
2.4.8 NSNotification與Delegate的區別 55
2.4.9 監聽系統自帶的NSNotification 56
2.5 小結 58
第3章 App與伺服器接口的定義 59
3.1 關於JSON的認識 59
3.2 App與伺服器接口的定義 61
3.2.1 App與後台的接口設計 61
3.2.2 後台返回的數據格式 61
3.2.3 後台返回的提示信息 62
3.3 JSON與Model的轉換 62
3.3.1 JSONModel常見的用法 63
3.3.2 JSONModel的幾個屬性用法 67
3.4 小結 69
第4章 CollectionView的套用 70
4.1 CollectionView與TableView孰優孰劣 70
4.1.1 TableView的套用場景 70
4.1.2 CollectionView的套用場景 71
4.1.3 CollectionView與TableView概念對比 71
4.1.4 CollectionView與TableView的性能對比 71
4.2 什麼是UICollectionView 71
4.3 實現一個簡單的UICollectionView 72
4.4 UICollectionViewCell視圖層級 73
4.5 UICollectionViewDataSource 74
4.6 關於Cell的重用 74
4.7 UICollectionViewDelegate 75
4.8 UICollectionViewLayout 76
4.9 實現一個簡單的瀑布流 77
4.9.1 通過手動編碼創建UICollectionView 78
4.9.2 直接拖曳一個CollectionViewController 81
4.9.3 基於Xib創建一個UICollectionViewCell 86
4.10 自定義瀑布流的套用場景 88
4.11 自定義Flow Layout進行瀑布流布局 88
4.11.1 自定義瀑布流的套用場景 89
4.11.2 自定義瀑布流的實現思路 90
4.11.3 創建自定義的Flow Layout 90
4.11.4 創建自定義的CollectionViewCell 92
4.11.5 關於initWithFrame:方法的使用 93
4.11.6 自定義瀑布流的完整實現 94
4.11.7 UICollectionView相關的類圖 96
4.11.8 如何實現UICollectionView的輪播 97
4.12 CollectionView與TableView的區別 98
4.13 圖片輪播的實現思路 98
4.14 CollectionView注意事項 99
4.15 小結 100
Web與Native混合開發模式
第5章 Block的套用 102
5.1 Block緣起 102
5.2 Block概述 103
5.3 Block的聲明、實現與調用 104
5.3.1 Block的聲明 104
5.3.2 Block的實現 106
5.3.3 Block的調用 108
5.3.4 Block外部變數的訪問 109
5.4 Block的套用場景 110
5.4.1 Block用於completionHandler 110
5.4.2 Block聲明為實例變數 113
5.4.3 typedef Block 114
5.5 通過Block實現視圖控制器之間的逆向傳值 115
5.5.1 套用場景 115
5.5.2 代碼實現 115
5.6 小結 118
第6章 iOS網路請求 119
6.1 iOS網路請求概述 119
6.2 AFNetworking的套用 119
6.2.1 AFNetworking概述 119
6.2.2 AFNetworking框架使用方法 121
6.2.3 影響網路請求的幾個條件 122
6.2.4 善用URL宏定義 124
6.2.5 URl接口應統一管理 124
6.2.6 AFNetworking的二次封裝 126
6.3 AFNetworking的序列化問題 126
6.3.1 AFNetworking請求格式 127
6.3.2 AFNetworking回響格式 128
6.4 異步請求數據並刷新UI頁面 128
6.5 遠程檔案下載 130
6.5.1 基於AFNetworking的檔案下載 130
6.5.2 基於NSURLSession的檔案下載 132
6.5.3 網路安全訪問設定 133
6.6 小結 134
第7章 JavaScript基礎 135
7.1 JavaScript語法 135
7.2 變數的聲明與賦值 136
7.3 如何判斷兩個字元串是否相等 137
7.4 創建JavaScript對象的三種方法 138
7.5 函式聲明與函式表達式 140
7.6 可立即調用的函式表達式 143
7.7 循環的實現 145
7.8 防止JavaScript自動插入分號 146
7.9 嚴格模式 147
7.10 如何運行與調試JavaScript代碼 148
7.10.1 把JavaScript代碼內嵌到HTML頁面中 148
7.10.2 通過Node.js運行JavaScript代碼 150
7.11 JavaScript的面向對象設計思想 150
7.12 JavaScript的異步編程模式 151
7.12.1 Promise對象 152
7.12.2 生成Promise實例對象 152
7.12.3 Promise原型方法 154
7.12.4 Promise的catch方法 154
7.13 如何在HTML中嵌入JavaScript 155
7.13.1