內容簡介
本書適合 iOS 開發零基礎的讀者閱讀。全書包含六大部分,共24章,涵蓋了針對 iOS 開發入門所需要掌握的核心內容,同時緊扣 iOS 開發的最新發展趨勢,以 Objective-C 語言為基礎,並引入了 Swift 語言以及 React Native 的介紹。通過本書的系統學習,能夠滿足一般軟體公司對 iOS 開發工程師的崗位要求。
第一部分:Objective-C 語言基礎。針對初學者介紹iOS開發使用最廣泛、成熟度最高的 Objective-C 語言,簡單扼要地介紹了在實際開發中最常使用的語法內容。第二部分:iOS 開發入門。基於UIKit框架,介紹了iOS開發中需要優先掌握的基礎類,包括基礎 UI 控制項、高級 UI 控制項、控制器、手勢等。第三部分:iOS 開發進階。著重介紹多執行緒、網路、存儲、繪圖、設計模式、設備、地圖、推送、證書以及套用發布等進階技術。第四部分:常用框架以及輔助工具介紹。介紹在實際開發中最常使用的輔助開發工具以及框架。第五部分:Swift 語言基礎。以 Swift 3.0 為基礎,介紹 Swift 語言的基本使用以及語法知識。第六部分:React Native 基礎。重點介紹了 React Native 的環境部署、基本概念以及常用框架的使用方法等內容。
本書適合 iOS 開發新手、iOS 程式設計師使用,也可以作為相關培訓機構和大專院校教學用書。
圖書目錄
第1部分
Objective-C語言基礎
第 1 章
環境搭建
3
1.1 Xcode 簡介 3
1.2 創建 App 套用 3
1.2.1 下載安裝 Xcode 3
1.2.2 使用 Xcode 創建 App .4
1.2.3 Xcode 開發界面介紹 5
1.3 程式調試 .6
1.3.1 App 運行狀態監控 6
1.3.2 UI 界面分析 6
1.3.3 斷點調試 .7
1.4 Xcode 常用快捷鍵 8
1.5 常用外掛程式 .9
1.5.1 蘋果封鎖第三方外掛程式的原因 .9
1.5.2 源碼編輯器擴展 .9
1.6 快捷代碼段 .10
1.6.1 如何創建代碼段 .10
1.6.2 常用代碼段 .11
第 2 章
數據類型與表達式
13
2.1 數據類型與常量 .13
2.1.1 基本數據類型 .13
2.1.2 限定詞 .15
2.1.3 id 與 instancetype 17
2.2 算術表達式 .18
2.2.1 基本運算符 .18
2.2.2 數據類型轉換 .20
2.3 循環結構 .22
2.3.1 for 循環 22
2.3.2 for-in 循環 .24
2.3.3 while 循環 .26
iOS開發:從零基礎到精通
6
2.3.4 break 與 continue 28
2.4 選擇結構 .29
2.4.1 if 語句 29
2.4.2 switch 語句 32
2.4.3 條件運算符 / 三目運算符 .35
2.5 typedef 語句 36
第 3 章
類、對象與方法
38
3.1 類 .38
3.1.1 類的定義 .38
3.1.2 類的繼承 .40
3.2 屬性 .42
3.2.1 屬性的定義 .42
3.2.2 公有屬性與私有屬性 44
3.2.3 屬性關鍵字 .45
3.3 方法 .48
3.3.1 方法的定義 .48
3.3.2 方法的調用 .49
3.3.3 方法的重寫 .52
3.4 對象 .54
3.4.1 創建對象 .54
3.4.2 對象操作 .57
3.5 變數 .60
3.5.1 局部變數 .60
3.5.2 全局變數 .61
3.5.3 靜態變數 .64
3.5.4 const 關鍵字 .66
第 4 章
Foundation 框架
. 69
4.1 Foundation 框架簡介 .69
4.2 字元串類 .69
4.2.1 不可變字元串 NSString 69
4.2.2 可變字元串 NSMutableString .74
4.3 數組類 .76
4.3.1 不可變數組 NSArray .76
4.3.2 可變數組 NSMutableArray .79
4.4 字典類 .81
4.4.1 不可變字典 NSDictionary .81
4.4.2 可變字典 NSMutableDictionary 84
4.5 NSNumber 類 86
7
4.6 NSDate 類 .88
4.7 NSFileManager 類 92
4.7.1 檔案操作 .92
4.7.2 操作 .96
4.7.3 枚舉中的內容 98
4.7.4 檔案的讀取與寫入 100
4.8 NSURL 類 .102
4.9 NSBundle 類 .103
第 5 章
Objective-C 語言特性
. 107
5.1 代碼塊 .107
5.1.1 Block 簡介 .107
5.1.2 Block 的參數與返回值 109
5.1.3 操作 Block 外部的變數 . 112
5.1.4 Block 回調 . 114
5.2 分類 . 116
5.3 協定 . 118
5.3.1 協定簡介 . 118
5.3.2 代理 . 119
5.4 KVC .120
5.4.1 使用 KVC 賦值取值 120
5.4.2 字典轉模型 122
5.4.3 修改 readonly 的屬性以及私有屬性 123
5.5 KVO 125
第 6 章
Objective-C 進階
128
6.1 對象複製 .128
6.1.1 淺複製與深複製 128
6.1.2 可變對象複製與不可變對象複製 129
6.1.3 自定義對象複製 135
6.2 記憶體管理 .137
6.3 預編譯指令 .139
6.3.1 宏定義 .139
6.3.2 #include、#import 與 @class 142
6.3.3 條件編譯 .143
6.4 NSLog 函式 145
6.4.1 NSLog 函式基本使用 .145
6.4.2 定製輸入日誌的格式 146
6.5 結構 .148
6.5.1 結構的定義與基本使用 148
iOS開發:從零基礎到精通
8
6.5.2 結構的嵌套 150
第2部分
iOS開發基礎
第 7 章
基礎 UI 控制項
. 155
7.1 UIKit 框架 .155
7.2 視圖 UIView .156
7.2.1 UIView 簡介 .156
7.2.2 視圖 UIView 的外觀 159
7.2.3 視圖 UIView 的形變 162
7.2.4 視圖 UIView 的層次關係 163
7.2.5 視圖 UIView 的動畫 166
7.2.6 回響用戶互動事件 167
7.2.7 內容模式 contentMode 170
7.2.8 圖片拉伸 .172
7.2.9 使用代碼創建自定義 UIView .175
7.2.10 使用 XIB 創建自定義 UIView 177
7.2.11 控制項改變坐標系(convertRect:) 180
7.3 圖片控制項 UIImageView 181
7.3.1 基本使用 .181
7.3.2 常用操作 .183
7.3.3 幀動畫功能 185
7.4 按鈕控制項 UIButton .186
7.4.1 基本使用 .186
7.4.2 按鈕的創建 188
7.4.3 調整圖示與標題的位置 190
7.5 文本控制項 UILabel .192
7.5.1 UILabel 簡介 192
7.5.2 常用的 UILabel 使用場景 .194
7.6 提示框控制項 .195
7.7 文本輸入框 UITextField 198
7.7.1 UITextField 的基本屬性 198
7.7.2 UITextField 的代理方法簡介 201
7.7.3 UITextField 的代理方法實例之鍵盤迴收 203
7.7.4 UITextField 的代理方法實例之字數限制 205
第 8 章
高級 UI 控制項
. 207
8.1 滾動視圖 UIScrollView .207
8.1.1 UIScrollView 基本使用 .207
8.1.2 UIScrollView 常用代理方法的實現 .209
9
8.1.3 視圖的縮放功能 212
8.2 表視圖 UITableView 214
8.2.1 UITableView 基本介紹 214
8.2.2 UITableView 的數據源方法 217
8.2.3 了解單元格 UITableViewCell .219
8.2.4 UITableView 創建示例 220
8.2.5 UITableView 代理方法之點擊單元格 222
8.2.6 UITableView 代理方法之編輯單元格 224
8.2.7 UITableViewCell 性能最佳化 .227
8.2.8 分段 Section .228
8.2.9 分段 Section 實現示例 231
8.2.10 自定義 Cell .235
8.2.11 Cell 高度的設定 .238
8.2.12 動態調整 Cell 高度(self-sizing) .238
8.2.13 動態調整 Cell 高度(代碼)
240
8.2.14 UITableView+FDTemplateLayoutCell 計算 Cell 高度 .244
8.2.15 改變 Cell 位置 247
8.2.16 UITableView 的 Header 和 Footer .247
8.2.17 去除多餘的單元格分割線 248
8.3 集合視圖 UICollectionView 249
8.3.1 UICollectionView 簡介 249
8.3.2 UICollectionView 數據源協定 DataSource 252
8.3.3 最簡單的集合視圖實現 253
8.3.4 UICollectionView 代理協定方法簡介 255
8.3.5 UICollectionView 代理方法實例 256
8.3.6 UICollectionViewFlowLayout 簡介 257
8.3.7 UICollectionViewFlowLayout 使用實例 259
8.3.8 UICollectionViewDelegateFlowLayout 類的代理方法實現 262
8.3.9 自定義 Cell .265
8.4 手勢 UIGestureRecognizer 267
8.4.1 UIGestureRecognizer 簡介 267
8.4.2 點擊手勢 UITapGestureRecognizer 269
8.4.3 捏合與旋轉手勢 UIPinchGestureRecognizer .270
8.4.4 滑動手勢 UISwipeGestureRecognizer 273
8.4.5 拖動手勢 UIPanGestureRecognizer 275
8.4.6 長按手勢 UILongPressGestureRecognizer276
第 9 章
控制器
278
9.1 控制器 UIViewController 278
9.1.1 控制器簡介以及創建控制器 278
iOS開發:從零基礎到精通
10
9.1.2 使用 XIB 以及 Storyboard 創建控制器 279
9.1.3 控制器的生命周期 283
9.1.4 使用 Storyboard 切換控制器 285
9.1.5 使用代碼切換控制器 287
9.1.6 控制器嵌套 288
9.2 導航控制器 UINavigationController .291
9.2.1 導航控制器簡介 291
9.2.2 控制器跳轉 295
9.2.3 子控制器的管理 295
9.2.4 UINavigationBar 296
9.2.5 barStyle 屬性 297
9.2.6 barTintColor 與 tintColor .298
9.2.7 導航欄設定背景圖片 299
9.2.8 UINavigationItem .300
9.2.9 UINavigationItem 定製示例 302
9.2.10 UINavigationItem 顯示原始圖片樣式 304
9.2.11 UINavigationController 的代理方法 .304
9.2.12 順傳數據 .305
9.2.13 使用代理逆傳數據 307
9.2.14 使用通知逆傳數據 309
9.2.15 使 Block 逆傳數據 .310
9.2.16 工具列 toolBar . 311
9.3 UITabBarController .313
9.3.1 UITabBarController 的常用屬性和方法 .313
9.3.2 UITabBar 的常用屬性和方法 .314
9.3.3 UITabBarItem 的常用屬性和方法 315
9.3.4 微信 TabBar 實現 .316
9.3.5 UITabBarController 的代理協定 .318
9.4 UIWindow、UIView 與 UIViewController 關係 .319
9.4.1 概念簡介 .319
9.4.2 關係描述 .320
第 10 章
其他 UI 控制項
. 322
10.1 WKWebView .322
10.1.1 WKWebView 簡介 .322
10.1.2 WKWebView 的基本使用——載入網頁 .324
10.1.3 網頁瀏覽控制 325
10.1.4 載入本地檔案 328
10.1.5 WKWebView 代理協定之 WKNavigationDelegate .330
10.2 UITextView .330
11
10.2.1 UITextView 的基本使用 330
10.2.2 UITextView 的代理方法 332
10.3 UIPageControl .333
10.3.1 UIPageControl 介紹 .333
10.3.2 UIPageControl 實際套用 .334
10.4 UIPickerView 338
10.4.1 UIPickerView 簡介 338
10.4.2 UIPickerView 的基本使用 340
10.4.3 相互依賴的多列選擇器 342
10.5 UISilder .345
10.5.1 UISlider 基本介紹 .345
10.5.2 UISlider 實例 .347
10.6 UIDatePicker .349
10.6.1 UIDatePicker 基本介紹 .349
10.6.2 UIDatePicker 基本使用 .349
10.7 UISegmentedControl 351
10.7.1 UISegmentedControl 簡介 .351
10.7.2 UISegmentedControl 實例 .352
第3部分
iOS開發進階
第 11 章
多執行緒
359
11.1 執行緒基礎知識 .359
11.2 GCD .362
11.2.1 GCD 基本概念介紹 .362
11.2.2 佇列與任務組合 363
11.2.3 執行緒間通信 369
11.2.4 佇列組 dispatch group 371
11.2.5 延遲執行操作 373
11.3 NSOperation 374
11.3.1 NSOperation 基本使用 374
11.3.2 執行緒間通信 379
11.3.3 任務間的執行依賴 380
第 12 章
網路
. 382
12.1 網路開發基本概念介紹 382
12.2 常用網路協定之 HTTP .383
12.3 網路請求之 GET、POST 請求 384
12.4 AFNetworking 框架介紹 .385
12.5 聚合數據 API 簡介 387
iOS開發:從零基礎到精通
12
12.6 GET 請求與 POST 請求使用示例 .389
12.7 JSON 和 XML 簡單介紹 .391
第 13 章
數據持久化
. 394
13.1 沙盒 .394
13.1.1 沙盒基礎 .394
13.1.2 在 Mac 上查看沙盒 .396
13.2 Plist 檔案 .397
13.2.1 Plist 簡介 .397
13.2.2 Plist 檔案的讀取 399
13.2.3 Plist 檔案的寫入 400
13.2.4 操作實例 .402
13.3 偏好設定 NSUserDefaults .406
13.3.1 NSUserDefaults 簡介 .406
13.3.2 讀寫示例 .407
13.4 歸檔 .409
13.4.1 基本使用 .409
13.4.2 單個對象歸檔 / 解檔 .410
13.4.3 自定義對象歸檔 / 解檔 .412
13.4.4 歸檔多個自定義對象 416
13.4.5 子類對象的歸檔 419
13.4.6 歸檔多個不同類型的對象 422
13.5 SQLite .424
13.5.1 資料庫的操作 424
13.5.2 表的操作 .427
13.5.3 數據記錄的操作 430
13.6 FMDB 433
13.6.1 基本介紹 .433
13.6.2 更新操作與查詢操作 436
13.6.3 執行緒安全 .438
13.7 Core Data .439
13.7.1 概念簡介 .439
13.7.2 使用示例 .440
13.8 Realm .445
13.8.1 Realm 基本介紹 .445
13.8.2 Realm 的安裝 .449
13.8.3 常用屬性與方法 451
13.8.4 Realm 使用示例 .453
13
第 14 章
繪圖和動畫
. 457
14.1 核心繪畫 .457
14.1.1 核心繪畫的基本概念 457
14.1.2 貝塞爾路徑 458
14.1.3 繪圖方法和步驟 460
14.1.4 常見圖形的繪製方法 461
14.2 UIImage 繪圖套用 .464
14.2.1 繪製圖片 .464
14.2.2 添加水印 .467
14.2.3 裁剪圓形圖片 470
14.2.4 截屏 .473
14.3 CALayer 474
14.3.1 CALayer 簡介 474
14.3.2 iOS 開發中的坐標系 .477
14.3.3 動畫屬性 .481
14.4 核心動畫 .482
14.4.1 核心動畫簡介 482
14.4.2 動畫的實現步驟 484
14.4.3 CAPropertyAnimiation 屬性動畫 485
14.4.4 CABasicAnimiation 基本動畫 .486
14.4.5 CAKeyframeAnimation 關鍵幀動畫 .487
14.4.6 CASpringAnimation 彈簧動畫 489
14.4.7 CAAnimationGroup 動畫組 490
14.4.8 CATransition 轉場動畫 492
第 15 章
設計模式
495
15.1 iOS 下的 MVC 設計模式 495
15.2 單例模式 .497
15.3 iOS 下的 MVVM 設計模式 499
第 16 章
自動布局
502
16.1 自動布局簡介 .502
16.2 Masonry .505
第 17 章
設備調用
511
17.1 UIDevice 類 511
17.1.1 獲取設備基本信息 511
17.1.2 獲取電池信息 512
17.1.3 接近感測器 514
iOS開發:從零基礎到精通
14
17.1.4 方向感測器 515
17.2 位置套用 .517
17.2.1 CoreLocation 框架簡介 .517
17.2.2 CoreLocation 框架的基本使用 .519
17.2.3 地理信息編碼簡介 522
17.2.4 CLGeocoder 套用案例 1 523
17.2.5 CLGeocoder 套用案例 2 526
17.3 地圖套用 .528
17.3.1 MKMapView 簡介 .528
17.3.2 MKMapView 的基本使用 .530
17.3.3 簡易地圖示注 531
17.3.4 簡易地圖示注示例 533
17.3.5 複雜地圖示注 534
17.3.6 複雜地圖示注示例 535
17.4 相機與相冊 .537
17.4.1 UIImagePickerController 簡介 537
17.4.2 UIImagePickerController 的使用 538
17.5 CoreMotion 框架 540
17.5.1 CoreMotion 基本介紹 540
17.5.2 獲取運動感測器的裸數據 543
17.5.3 CMDeviceMotion .546
17.6 系統套用調用 .548
17.6.1 撥打電話功能 548
17.6.2 傳送簡訊功能 550
17.6.3 傳送郵件功能 552
第 18 章
證書管理與套用發布
555
18.1 證書管理 .555
18.1.1 iOS 開發證書(調試證書)管理 .555
18.1.2 iOS 發布證書創建詳解 .565
18.2 推送證書管理 .574
18.2.1 推送調試證書 574
18.2.2 推送生產證書 577
18.3 App Store 套用發布 .581
18.3.1 App Store 套用發布詳解 .581
18.3.2 App 被拒絕上架的原因解析 .590
第 19 章
訊息推送
593
19.1 遠程訊息推送 .593
19.1.1 極光(JPush)訊息推送集成 .593
15
19.1.2 獲取推送訊息內容 596
19.1.3 打開指定界面(自定義訊息內容) 597
19.1.4 管理 App 的 Badge(本地方式) 599
19.1.5 管理 App 的 Badge(遠程伺服器方式) 600
19.1.6 更改推送訊息提示音 602
19.2 本地訊息推送(基於 iOS10 UserNotifications 框架)
604
19.2.1 UNNotificationRequest 類 .604
19.2.2 UNNotificationContent 類 605
19.2.3 UNNotificationTrigger 類.607
19.2.4 UNUserNotificationCenterDelegate 代理協定 609
19.2.5 示例代碼 .610
第 20 章
其他高級知識點
613
20.1 App 的生命周期 .613
20.2 使用 AVFoundation 框架實現掃描二維碼 .618
第4部分
常用第三方框架與工具
第 21 章
常用第三方框架介紹
623
21.1 CocoaPods .623
21.1.1 CocoaPods 的安裝 .623
21.1.2 使用 CocoaPods 安裝 SDK .626
21.2 高德地圖 .629
21.2.1 高德地圖簡介 629
21.2.2 高德地圖 SDK 的安裝 630
21.2.3 地圖 SDK 簡介 632
21.2.4 繪製地圖示注 634
21.2.5 定位 SDK .636
21.3 SDWebImage .637
21.4 免費簡訊驗證碼 .639
21.5 MBProgressHUD 643
21.5.1 MBProgressHUD 簡介 .643
21.5.2 MBProgressHUD 基本使用 .645
21.6 YYModel .649
21.6.1 YYModel 簡介 .649
21.6.2 YYModel 使用案例 .650
第 22 章
常用開發工具介紹
652
22.1 Reveal——AppUI 界面分析 .652
iOS開發:從零基礎到精通
16
22.1.1 Reveal 使用簡介 652
22.1.2 分析任意 iOS 套用的 UI 界面 655
22.2 Charles——網路抓包工具 657
22.2.1 抓取 HTTP 請求(基礎) 657
22.2.2 抓取 HTTPS 請求(高級) 659
22.3 GitHub .664
22.3.1 GitHub 簡介 .664
22.3.2 GitHub Desktop 桌面工具的安裝 .664
22.3.3 創建倉庫 .667
22.3.4 版本控制 .670
22.3.5 分支 branch 操作 .676
22.3.6 衝突處理 .678
22.3.7 團隊合作 .681
第5部分
Swift語言基礎
第 23 章
Swift 語言基礎
689
23.1 Swift 簡介 .689
23.2 常量和變數 .691
23.3 基本運算符 .693
23.4 字元串和字元 .694
23.5 集合類型 .700
23.6 流程控制 .707
23.6.1 循環語句 .707
23.6.2 條件語句 .710
23.6.3 控制轉移語句 712
23.7 函式基礎 .715
23.8 函式類型 .718
23.9 閉包 .720
23.10 枚舉 .724
23.11 類和結構體 .728
23.12 屬性 .731
23.13 方法 .735
23.14 下標 .738
23.15 繼承 .740
23.16 初始化 .743
23.17 析構 .749
23.18 擴展 .751
23.19 協定 .757
23.20 泛型 .760
17
23.21 可選鏈 .763
第6部分
React Native基礎
第 24 章
React Native 基礎
. 771
24.1 搭建 React Native 開發環境 .771
24.2 編寫 Hello World 776
24.3 屬性 Props .778
24.4 狀態 State 780
24.5 樣式 style 781
24.6 界面布局 .784
24.7 網路 .788
24.8 Text 組件 .791
24.9 Image 組件 794
24.10 Button 組件 .796
24.11 TouchableHighlight 組件 .799
24.12 TextInput 組件 .802
24.13 KeyboardAvoidingView 組件 805
24.14 ScrollView 組件 808
24.15 ListView 組件 . 811
24.16 Navigator 組件 815
24.17 TabBarIOS 組件 820
參考文獻
824