iOS开发:从零基础到精通

更多详情

内容简介: 本书适合 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


前言: 一、编写本书的目的
随着中国移动互联网行业的蓬勃发展,几年前,我也积极投身到互联网创业中。在创业方
向的选择上,几经尝试,最终选择了互联网教育。一方面是因为希望为中国的互联网企业提供
更多的合格人才;另外一方面也希望为广大的学子提供一个高质量、低价格的学习平台。目前,
我国的高等教育的人才供给与市场需求之间还存在着巨大的偏差,特别在移动开发兴起的前几
年,能够熟练掌握移动应用开发技能的工程师极为稀缺,因而造成了企业用人成本居高不下。
互联网企业通常只能靠高薪挖猎才能获得心仪的员工,这严重制约了互联网企业,特别是中小
互联网企业的创新与发展步伐。为了解决供需两端的矛盾,我就在思考能否提供一本高质量且
低价格,既无学习门槛且又符合最佳项目实践的图书呢?从去年开始,我和我的伙伴们一同开
始筹划编写这本书,把我们在实践教学过程中以及实践开发过程中的经验进行提炼和总结,本
书适合没有任何移动开发技术的读者从零开始学习,并且能够快速掌握实际工作中最常使用的
核心技术,做到合理利用时间且有的放矢地进行学习。
移动技术的开发经过几年的竞争,已经形成了两大方向
:iOS 以及 Android。Android 平台
的用户数量巨大,且 Android 开发以 Java 语言为基础,所以之前很多从事 Java 开发的工程师
都转型成为 Android 开发工程师,其入门门槛相对较低。而苹果的 iOS 系统,由于其采用的语
言是 Objective-C,在最初阶段能够熟练掌握该门语言的工程师数量极为稀缺,因此造成了 iOS
开发的入门门槛比较高。由于 iOS 系统是一个相对封闭的系统,其前期的语言学习有一定难
度,但是一旦入门之后,其进阶学习的难度要比 Android 平台容易很多。虽然目前 Android 平
台的用户数量超过 iOS 平台,但苹果设备在工业设计、用户体验、客户价值等方面都有很大的
优势。
二、本书的主要内容
在开始编写本书之前,我们团队内部针对究竟该采用 Objective-C 语言为主,还是 Swift
语言为主,展开了激烈的讨论。由于大家学习一门语言更多的目的是出于就业需要,综合目前
国内的现状,我们认为在目前阶段还是需要以 Objective-C 语言为主。虽然苹果公司官方以及
国内外很多媒体都在大力推广 Swift 语言,但就国内现状而言,Swift 语言还不是一门成熟且
被普遍使用的语言,但我们相信在 2~3 年以后,Swift 语言一定会有较快的发展,而如果从就
业角度考虑,我们认为还是需要优先掌握 Objective-C 语言。在介绍 iOS 平台的基础知识过程中,
我们使用了 Objective-C 语言,但对 Swift 语言也提供了入门使用的语法介绍,有兴趣的读者
可以使用 Swift 语言把前面的代码进行重写。另外,从 2015 年开始,React Native 变得越发火热,
为了紧跟技术发展趋势,同时为了增加大家的就业竞争力,我们在本书中也加入了对 React Native 技术的
介绍。总之,全书的内容是紧紧围绕就业这个目的展开的,如果你想成为一名 iOS 开发工程师,本书会是
你的一个好选择。
本书包括六大部分,24 章。
第 1 部分介绍了 Objective-C 语言。如果完整地介绍 Objective-C 语言,需要一本厚厚的书籍,而我
们把 Objective-C 语言在日常编程工作中最常使用的功能进行了提炼,让大家能够快速地掌握 Objective-C
语言中最核心的内容。
第 2 部分以 UIKit 框架为主,介绍了 iOS 开发中构成界面所需的各种控件,同时重点介绍了在实际应
用中广泛使用的几种控制器,包括普通控制器、导航控制器等。
第 3 部分提供了 iOS 开发中使用的进阶内容,包括多线程技术、数据持久化技术、网络、地图、传感器、
核心绘图、核心动画、消息推送、证书管理以及应用发布等内容,使读者能够对 iOS 开发中的高级知识点
具备完整的认知。
第 4 部分介绍了在 iOS 开发中使用的第三方开源框架和工具。程序员的世界是一个开放的世界。开放、
开源应该是每个致力于从事技术岗位的程序员的追求。借助第三方开源框架以及工具能够帮助我们极大地
提升开发效率,学会使用其他人提供的“梯子”已经是当前每个程序员必须掌握的技巧。
第 5 部分我们提供了 Swift 语言的介绍。虽然 Swift 语言目前在国内还没有完全成为主流,并且其自
身也存在一些不完善的地方,但提前掌握 Swift 语言的基础对于将来向 Swift 语言过渡是大有益处的。
第 6 部分是 React Native 技术的介绍。React Native 是 Facebook 于 2015 年开源的跨平台移动应
用开发框架,React Native 之所以近一两年非常火热,其中一个重要原因在于其能够同时完成 iOS 以及
Android 两个客户端的编写。在 React
Native 的章节中我们着重介绍了 React Native 开发环境的部署、重
要概念以及常用控件的使用,使读者能够由浅入深地逐步掌握该项技术的核心用法。
三、配书资源
为了帮助各位读者学习,我们团队录制了配套教学视频,每个视频的长度都控制在 10 分钟左右,便
于大家能够在最短的时间内掌握每个知识点的核心内容,欢迎各位读者到清华大学出版社官网下载或联系
作者获取(www.99ios.com)。另外,针对每个章节,我们都提供了示例代码,也欢迎各位读者下载。
四、反馈与勘误
欢迎广大读者对本书做出反馈,让我们知道本书中哪些部分是您喜欢的或者哪些部分是需要完善的。
如果您对本书有任何建议,请发送邮件至 3300170691@qq.com。
虽然我们团队十分用心确保内容的准确性,但错误依然难以避免。如果在阅读过程中,您发现了书中
存在的错误,非常感谢您能反馈给我们,请将错误内容发送至 3300170691@qq.com,这不仅能够帮助其他
读者解除疑惑,也可以帮助我们在下一个版本中进行改善。
五、致谢
完成一本书籍的编写是对技术、体力以及意志的综合考验,我们团队牺牲了无数的休息时间才完成了
全书的编写。首先,需要感谢清华大学出版社的编辑在编写过程中给予我们的耐心指导。其次,要感谢我
的伙伴们,特别是汤海波以及闫珍完成了 React Native 以及 Swift 内容的编写,并对全书的内容进行了审核
;李维佳作为我最优秀的学生完成了全书内容的整理以及案例代码的编写。最后,感谢我的爱人,在我
编写本书期间承担起了全部的家庭事务
;2017 年恰逢我的父母六十大寿,在此也祝愿两位老人身体健康,
每天都有好心情!
由于时间仓促,书中难免有不妥之处,请读者原谅。
史昕
2017 年 12 月

书摘: 对象与方法
3.1类
3.1.1类的定义
在Objective-C中,每个类的定义包括两个部分:接口(interface)和实现(implementation)。接口部
分定义在.h文件中,包含类的声明、属性以及方法,主要作用是对外提供访问接口。实现部分定义在.m
文件中,主要用于方法的功能实现。这种定义类的方法,好处在于将公共声明(接口)与代码实现分开,
对外屏蔽了功能实现的细节,体现了面向对象的封装特性。
1.
类定义简介
类定义是一种类型的对象的原型,其声明了每个对象都具有的属性(Property),同时还定义了同一
类的所有对象都使用的一系列方法(Method)。
编译器为每个类创建一个可访问的对象,称为类的对象(也称为工厂对象),类方法负责创建属于该
类的新对象。类对象是类编译后的版本,由它创建的对象叫作类的实例,创建对象的过程也常称作实例化。
在Objective-C中,一个类有接口文件和实现文件两部分组成,通常放在不同的文件里面。其中:
.接口文件(.h后缀文件):主要完成类的具体声明。
.实现文件(.m后缀文件):主要完成类的具体实现。
当使用Xcode创建一个类时,Xcode会自动创建.h和.m两个文件。
2.
接口文件
接口文件完成类的声明,向外界提供如何使用该类,主要体现了以下3类信息。
.继承关系:通过继承关系可以了解该类是哪个类的子类,从而可以了解可供调用的父类的方法和
属性。
.属性Property。
.方法Method。
接口部分的定义以@interface开始,以@end结束。下面的示例代码,定义了一个游戏人物的Player
类,这个类继承自NSObject,其中又定义了两个人物属性healthPoint与magicPoint,以及一个初始化类方
法player,同时又提供了两个攻击方法,一个普通攻击normalAttack,一个魔法攻击magicAttack。
#import
@interfacePlayer:NSObject
@property(nonatomic,assign)inthealthPoint;
@property(nonatomic,assign)intmagicPoint;
第3章
39
第3章类、对象与方法
+(Player*)player;
-(void)normalAttack;
-(void)magicAttack;
@end
注意:在iOS开发中,属性和方法的命名一般推荐使用驼峰法命名规则。驼峰法命名规则就是当属性
名或者方法名由多个单词构成时,第一个单词以小写字母开始,之后每个单词的首字母都用大写,驼峰法
命名规则可以提升程序的可读性。
3.
实现文件
类的实现部分以@implementation开始,并以@end结束。在类的实现部分,需要使用#import命令,
引用类的接口部分。
在类的实现部分(.m文件)中,需要对接口部分定义的方法进行实现。
如下面实例,在类方法Player中,创建了Player对象,并且给healthPoint/magicPoint属性赋了初始值,
并且定义了两个攻击方法,其中,当使用魔法攻击的时候,还会消耗自身的magicPoint值。
.引用.h文件。
#import"Player.h"
.实现接口文件中定义的方法。
@implementationPlayer
+(Player*)player{
//实例化对象
Player*player=[[Playeralloc]init];
//设置属性初始值
player.healthPoint=100;
player.magicPoint=100;
//返回对象
returnplayer;
}
-(void)normalAttack{
//普通攻击
...
}
-(void)magicAttack{
//魔法攻击,消耗自身魔法值
self.magicPoint-=10;
}
@end
iOS开发:从零基础到精通
40
3.1.2类的继承
继承是面向对象编程的重要特性之一,类定义是累加的,每一个定义的类都是基于其父类,并且可以
继承父类中定义的属性和方法。需要注意的是,NSObject类是所有类的父类。
1.
新增子类
在Xcode中,依次单击File→New→File→CocoaTouchClass,即可新增类,如图3-1所示。在
Subclassof中输入或者选择新增类的父类,如图3-2所示:新增的Magician类是Player类的子类,因为魔
法师(Magician)也是属于游戏人物(Player)之一。
……