关东升
智捷课堂创始人,国内知名iOS技术作家,iOS技术顾问,高级培训讲师,移动开发专家。担任51CTO社区iOS技术顾问,精通iOS、Android和Windows Phone及HTML5等移动开发技术。曾先后主持开发大型网络游戏《神农诀》的iOS和Android客户端开发,国家农产品追溯系统的iPad客户端开发,酒店预订系统的iPhone客户端开发,金融系统微博的iOS、Windows Phone 及Android客户端开发。在App Store上发布多款游戏和应用软件,擅长移动平台的应用和游戏类项目开发。长期为中国移动研究院、云南移动、东软、方正科技、惠普、NTT、深圳康拓普、上海财富168、天津港务局、福州软件园、广州软件园等企事业单位授课。除本书外,还著有《Swift开发指南》《iOS网络编程与云端应用最佳实践》《iOS传感器应用开发最佳实践》《iOS图形图像、动画和多媒体编程技术最佳实践》《iPhone与iPad开发实战——iOS经典应用剖析》《品味移动设计》《交互设计的艺术》《Android开发案例驱动教程》、《Android网络游戏开发实战》,以及《Cocos2d-x实战》系列丛书等。
第一部分 基础篇
第1章 开篇综述2
1.1 iOS概述2
1.1.1 iOS介绍2
1.1.2 iOS 8的新特性2
1.2 开发环境及开发工具3
1.3 本书中的约定4
1.3.1 案例代码约定4
1.3.2 图示的约定5
1.3.3 方法命名约定6
1.3.4 构造器命名约定7
第2章 第一个iOS应用程序9
2.1 创建HelloWorld工程9
2.1.1 创建工程9
2.1.2 Xcode中的iOS工程模板14
2.1.3 应用剖析15
2.2 HelloWorld工程中的故事板文件17
2.2.1 故事板的导航特点17
2.2.2 故事板中的Scene和Segue19
2.3 应用生命周期19
2.3.1 非运行状态——应用启动场景21
2.3.2 点击Home键——应用退出场景22
2.3.3 挂起重新运行场景24
2.3.4 内存清除——应用终止场景25
2.4 视图生命周期25
2.5 设置产品属性27
2.5.1 Xcode中的PROJECT和TARGET27
2.5.2 设置常用的产品属性29
2.6 iOS API简介30
2.6.1 API概述31
2.6.2 如何使用API帮助33
2.7 小结36
第3章 UIView与视图37
3.1 视图“始祖”——UIView37
3.1.1 UIView“家族”37
3.1.2 应用界面的构建层次39
3.1.3 视图分类40
3.2 标签与按钮40
3.2.1 标签控件41
3.2.2 按钮控件42
3.3 动作与输出口44
3.4 TextField和TextView48
3.4.1 TextField控件48
3.4.2 TextView控件49
3.4.3 键盘的打开和关闭50
3.4.4 关闭和打开键盘的通知50
3.4.5 键盘的种类51
3.5 开关控件、滑块控件和分段控件52
3.5.1 开关控件53
3.5.2 滑块控件53
3.5.3 分段控件54
3.6 网页视图WebView54
3.7 等待相关的控件与进度条57
3.7.1 活动指示器ActivityIndicatorView58
3.7.2 进度条ProgressView59
3.8 警告框和操作表60
3.8.1 警告框60
3.8.2 操作表ActionSheet62
3.8.3 使用iOS 8 UIAlertController实现63
3.9 工具栏和导航栏64
3.9.1 工具栏64
3.9.2 导航栏67
3.10 小结70
第4章 iOS 8多分辨率屏幕适配71
4.1 iOS 8屏幕的多样性71
4.1.1 iOS 8屏幕介绍71
4.1.2 iOS 8的三种分辨率72
4.1.3 获得iOS设备屏幕信息73
4.2 iOS屏幕布局74
4.2.1 iOS中的“栏”74
4.2.2 传统布局75
4.3 Auto Layout布局77
4.3.1 在Interface Builder中管理Auto Layout约束77
4.3.2 实例:Auto Layout布局78
4.4 Size Class与iOS 8多屏幕适配83
4.4.1 在Interface Builder中使用Size Class83
4.4.2 Size Class的九宫格84
4.4.3 实例:使用Size Class85
4.5 在屏幕滚动视图中使用Auto Layout和Size Class90
4.5.1 屏幕滚动视图的重要属性90
4.5.2 屏幕滚动视图实例92
4.6 使用资源目录(asset catalog)管理图片97
4.7 小结100
第5章 委托协议、数据源协议与高级视图101
5.1 视图中的委托协议和数据源协议101
5.2 选择器101
5.2.1 日期选择器101
5.2.2 普通选择器103
5.2.3 数据源协议与委托协议106
5.3 集合视图108
5.3.1 集合视图介绍108
5.3.2 实例:奥运会比赛项目109
5.3.3 添加集合视图控制器110
5.3.4 添加集合视图单元格113
5.3.5 数据源协议与委托协议116
5.4 小结117
第6章 表视图118
6.1 概述118
6.1.1 表视图的组成118
6.1.2 表视图的相关类119
6.1.3 表视图分类119
6.1.4 单元格的组成和样式121
6.1.5 数据源协议与委托协议123
6.2 简单表视图123
6.2.1 创建简单表视图123
6.2.2 自定义单元格128
6.2.3 添加搜索栏131
6.3 分节表视图137
6.3.1 添加索引137
6.3.2 分组140
6.3.3 静态表与控制界面布局141
6.4 修改单元格144
6.4.1 删除和插入单元格144
6.4.2 移动单元格151
6.5 表视图UI设计模式153
6.5.1 分页模式153
6.5.2 下拉刷新模式154
6.5.3 下拉刷新控件154
6.6 小结157
第7章 视图控制器与导航模式158
7.1 概述158
7.1.1 视图控制器的种类158
7.1.2 导航模式158
7.1.3 模态视图160
7.2 平铺导航166
7.2.1 应用场景166
7.2.2 基于分屏导航的实现168
7.2.3 基于电子书导航的实现173
7.3 标签导航178
7.3.1 应用场景178
7.3.2 实现179
7.4 树形结构导航182
7.4.1 应用场景182
7.4.2 实现183
7.5 组合使用导航模式190
7.5.1 应用场景190
7.5.2 实现191
7.6 小结198
第8章 iOS常用设计模式199
8.1 单例模式199
8.1.1 问题提出199
8.1.2 Objective-C实现原理199
8.1.3 Swift实现原理200
8.1.4 应用案例201
8.2 委托模式202
8.2.1 问题提出202
8.2.2 实现原理204
8.2.3 应用案例207
8.3 观察者模式211
8.3.1 问题提出211
8.3.2 实现原理211
8.3.3 通知机制和KVO机制212
8.4 MVC 模式218
8.4.1 MVC模式概述218
8.4.2 Cocoa Touch中的MVC模式219
8.5 小结221
第9章 iPhone与iPad应用开发的差异222
9.1 概述222
9.1.1 应用场景差异222
9.1.2 设计和开发需注意的问题222
9.2 iPad专用API225
9.2.1 UIPopoverController控制器225
9.2.2 UISplitViewController控制器229
9.3 小结234
第10章 iOS分层架构设计235
10.1 低耦合企业级系统架构设计235
10.2 iOS分层架构设计236
10.2.1 工程与工作空间236
10.2.2 静态链接库237
10.2.3 框架237
10.2.4 10种分层模式238
10.3 实例:MyNotes应用238
10.4 基于同一工程的分层240
10.4.1 采用纯Swift语言实现——PSSS模式240
10.4.2 采用纯Objective-C语言实现——POOO模式243
10.4.3 采用Swift与Objective-C混合搭配实现——PSOO模式247
10.5 基于同一工作空间静态链接库实现的WLSOO模式247
10.5.1 使用工作空间247
10.5.2 添加数据持久层工程248
10.5.3 建立业务逻辑层与数据持久层的依赖关系249
10.5.4 建立表示层与业务逻辑层的依赖关系251
10.6 基于同一工作空间框架实现的WFSSS模式251
10.6.1 创建框架工程251
10.6.2 依赖关系建立253
10.6.3 代码重构254
10.7 基于同一工作空间框架实现的WFOOO模式255
10.7.1 设置Public头文件255
10.7.2 建立表示层与业务逻辑层的依赖关系256
10.7.3 代码重构256
10.8 基于同一工作空间框架实现的WFSOO模式256
10.8.1 设置Public头文件256
10.8.2 建立表示层与业务逻辑层的依赖关系257
10.8.3 代码重构257
10.9 基于同一工作空间框架实现的WFOSS模式258
10.9.1 设置Public头文件258
10.9.2 代码重构258
10.10 小结258
第11章 数据持久化259
11.1 概述259
11.1.1 沙箱目录259
11.1.2 持久化方式260
11.2 属性列表260
11.3 对象归档264
11.4 使用SQLite数据库268
11.4.1 SQLite数据类型268
11.4.2 创建数据库269
11.4.3 查询数据271
11.4.4 修改数据273
11.5 Core Data276
11.5.1 ORM276
11.5.2 Core Data堆栈276
11.5.3 建模和生成实体280
11.5.4 采用Core Data分层架构设计283
11.5.5 查询数据285
11.5.6 修改数据286
11.6 小结288
第12章 应用程序设置289
12.1 概述289
12.1.1 设置289
12.1.2 配置290
12.2 应用程序设置包291
12.3 设置项目种类293
12.3.1 文本字段295
12.3.2 开关298
12.3.3 滑块299
12.3.4 值列表300
12.3.5 子界面301
12.4 读取设置303
12.5 小结304
第13章 国际化305
13.1 概述305
13.1.1 需要国际化的内容305
13.1.2 国际化目录结构307
13.2 文本信息国际化308
13.2.1 系统按钮和信息国际化308
13.2.2 应用名称国际化309
13.2.3 程序代码输出的静态文本国际化311
13.2.4 使用genstring工具312
13.3 xib和故事板文件国际化313
13.3.1 使用Base国际化技术313
13.3.2 Auto Layout与国际化315
13.4 资源文件国际化317
13.4.1 图片资源文件国际化317
13.4.2 声音资源文件国际化318
13.5 小结318
第14章 访问联系人319
14.1 概述319
14.2 读取联系人信息320
14.2.1 查询联系人记录321
14.2.2 读取单值属性324
14.2.3 读取多值属性326
14.2.4 读取图片属性328
14.3 写入联系人信息329
14.3.1 创建联系人330
14.3.2 修改联系人332
14.3.3 删除联系人333
14.4 高级API335
14.4.1 选择联系人335
14.4.2 显示和修改联系人336
14.4.3 创建联系人339
14.5 小结342
第二部分 网络篇
第15章 访问Web Service344
15.1 概述344
15.2 数据交换格式344
15.2.1 XML文档结构346
15.2.2 解析XML文档347
15.2.3 JSON文档结构355
15.2.4 JSON数据解码356
15.3 REST Web Service357
15.3.1 HTTP和HTTPS协议358
15.3.2 同步GET请求方法358
15.3.3 异步GET请求方法361
15.3.4 POST请求方法362
15.3.5 调用REST Web Service的插入、修改和删除方法363
15.4 使用轻量级网络请求框架MKNetworkKit368
15.4.1 ASIHTTPRequest、AFNetworking和MKNetworkKit比较368
15.4.2 安装和配置MKNetworkKit框架369
15.4.3 网络请求370
15.4.4 下载数据371
15.4.5 上传数据373
15.5 反馈网络信息改善用户体验375
15.5.1 使用下拉刷新控件改善用户体验375
15.5.2 使用活动指示器控件378
15.5.3 使用网络活动指示器380
15.6 小结380
第16章 定位服务与地图应用381
16.1 定位服务381
16.1.1 定位服务编程382
16.1.2 地理信息反编码386
16.1.3 地理信息编码查询388
16.1.4 关于定位服务的测试390
16.2 使用iOS苹果地图393
16.2.1 显示地图393
16.2.2 添加标注395
16.2.3 跟踪用户位置变化398
16.3 使用程序外地图399
16.3.1 调用iOS苹果地图400
16.3.2 调用谷歌Web地图402
16.4 小结404
第三部分 进阶篇
第17章 iOS中的商业模式406
17.1 收费策略406
17.1.1 iOS如何赚钱406
17.1.2 避免定价策略误区406
17.1.3 免费软件的艺术407
17.1.4 在适当的时间、适当的地点植入广告407
17.1.5 尝试不同的盈利模式407
17.2 使用苹果iAd 广告408
17.2.1 横幅广告408
17.2.2 插页广告411
17.2.3 查看你的收入417
17.3 使用谷歌AdMob广告419
17.3.1 注册AdMob账号419
17.3.2 管理AdMob广告419
17.3.3 AdMob广告类型422
17.3.4 下载AdMob Ads SDK423
17.3.5 配置AdMob开发环境424
17.3.6 AdMob横幅广告426
17.3.7 添加AdMob插页广告428
17.3.8 为广告提交用户和位置信息431
17.3.9 搜索广告431
17.4 小结433
第18章 找出程序中的bug——调试434
18.1 Xcode调试工具434
18.1.1 定位编译错误434
18.1.2 查看和显示日志435
18.1.3 设置和查看断点437
18.1.4 调试工具442
18.1.5 输出窗口443
18.1.6 变量查看窗口444
18.1.7 查看线程445
18.2 日志与断言输出446
18.2.1 使用NSLog函数446
18.2.2 使用断言447
18.3 异常堆栈报告分析448
18.3.1 跟踪异常堆栈448
18.3.2 分析堆栈报告450
18.4 在iOS设备上调试450
18.4.1 创建开发者证书451
18.4.2 设备注册455
18.4.3 创建App ID456
18.4.4 创建配置概要文件459
18.4.5 设备调试460
18.5 Xcode设备管理工具461
18.5.1 查看设备上的应用程序462
18.5.2 设备日志464
18.6 小结464
第19章 测试驱动下的iOS应用开发465
19.1 测试驱动的软件开发概述465
19.1.1 测试驱动的软件开发流程465
19.1.2 测试驱动的软件开发案例466
19.1.3 iOS单元测试框架467
19.2 使用XCTest测试框架468
19.2.1 添加XCTest到工程468
19.2.2 编写XCTest测试方法469
19.2.3 运行测试程序472
19.2.4 分析测试报告473
19.3 异步单元测试475
19.4 性能测试478
19.4.1 配置测试环境478
19.4.2 测试代码479
19.4.3 分析测试结果480
19.5 iOS单元测试最佳实践481
19.5.1 测试数据持久层481
19.5.2 测试业务逻辑层485
19.6 小结486
第20章 让你的程序“飞”起来——性能优化487
20.1 内存优化487
20.1.1 内存管理487
20.1.2 使用Analyze和Instruments工具解决内存泄漏问题487
20.1.3 查找和解决僵尸对象494
20.1.4 autorelease的使用问题497
20.1.5 响应内存警告497
20.2 优化资源文件499
20.2.1 图片文件优化499
20.2.2 音频文件优化500
20.3 延迟加载501
20.3.1 资源文件的延迟加载501
20.3.2 故事板文件的延迟加载505
20.3.3 xib文件的延迟加载507
20.4 数据持久化的优化509
20.4.1 使用文件509
20.4.2 使用SQLite数据库513
20.4.3 使用Core Data514
20.5 可重用对象的使用516
20.5.1 表视图中的可重用对象516
20.5.2 集合视图中的可重用对象518
20.5.3 地图视图中的可重用对象519
20.6 并发处理与多核CPU520
20.6.1 主线程阻塞问题520
20.6.2 选择NSThread还是GCD521
20.7 小结521
第21章 管理好你的程序代码——代码版本控制522
21.1 概述522
21.1.1 版本控制历史522
21.1.2 基本概念523
21.2 Git代码版本控制523
21.2.1 服务器搭建523
21.2.2 Gitolite服务器管理525
21.2.3 Git常用命令527
21.2.4 Git分支529
21.2.5 Git协同开发533
21.2.6 Xcode中Git的配置与使用535
21.3 GitHub代码托管服务542
21.3.1 创建和配置GitHub账号542
21.3.2 创建代码库544
21.3.3 删除代码库546
21.3.4 派生代码库546
21.3.5 使用GitHub协同开发549
21.3.6 管理组织555
21.4 小结558
第22章 把你的应用放到App Store上559
22.1 收官559
22.1.1 在Xcode 6中添加图标559
22.1.2 在Xcode 6中添加启动界面562
22.1.3 调整Identity和Deployment Info属性564
22.1.4 为发布进行编译567
22.2 发布流程571
22.2.1 创建应用572
22.2.2 基本信息输入574
22.2.3 应用定价577
22.2.4 上传应用577
22.2.5 提交审核579
22.3 常见审核不通过的原因581
22.3.1 功能问题581
22.3.2 用户界面问题581
22.3.3 商业问题581
22.3.4 不当内容581
22.3.5 其他问题582
22.4 小结582
第四部分 实战篇
第23章 重构MyNotes应用——iOS网络通信中的设计模式与架构设计584
23.1 移动网络通信应用的分层架构设计584
23.2 Objective-C版本:在工作空间中添加和配置MKNetworkKit585
23.3 基于委托模式实现587
23.3.1 网络通信与委托模式587
23.3.2 在异步网络通信中使用委托模式实现分层架构设计587
23.3.3 类图588
23.3.4 时序图591
23.3.5 数据持久层重构593
23.3.6 业务逻辑层的代码实现597
23.3.7 表示层的代码实现599
23.4 基于观察者模式的通知机制实现603
23.4.1 观察者模式的通知机制回顾603
23.4.2 异步网络通信中通知机制的分层架构设计604
23.4.3 类图605
23.4.4 时序图606
23.4.5 数据持久层的重构609
23.4.6 业务逻辑层的代码实现611
23.4.7 表示层的代码实现612
23.5 小结616
第24章 iOS敏捷开发项目实战——2016里约热内卢奥运会应用开发及App Store发布617
24.1 应用分析与设计617
24.1.1 应用概述617
24.1.2 需求分析617
24.1.3 原型设计618
24.1.4 数据库设计619
24.1.5 架构设计619
24.2 iOS敏捷开发620
24.2.1 敏捷开发宣言620
24.2.2 iOS适合敏捷开发?621
24.2.3 iOS敏捷开发最佳实践621
24.3 任务1:创建应用工作空间和工程623
24.3.1 迭代1.1:创建Swift版本的工程623
24.3.2 迭代1.2:创建Objective-C版本工作空间623
24.3.3 迭代1.3:发布到GitHub623
24.4 任务2:信息系统层与持久层开发624
24.4.1 迭代2.1:编写数据库DDL脚本624
24.4.2 迭代2.2:插入初始数据到数据库625
24.4.3 迭代2.3:编写实体类625
24.4.4 迭代2.4:DAO类XCTest单元测试626
24.4.5 迭代2.5:数据库帮助类DBHelper629
24.4.6 迭代2.5:编写DAO类632
24.4.7 迭代2.6:发布到GitHub635
24.5 任务3:业务逻辑层开发636
24.5.1 迭代3.1:对比赛项目业务逻辑类进行XCTest单元测试636
24.5.2 迭代3.2:编写比赛项目业务逻辑类637
24.5.3 迭代3.3:对比赛日程业务逻辑类进行XCTest单元测试638
24.5.4 迭代3.4:编写比赛日程业务逻辑类639
24.5.5 迭代3.5:发布到GitHub640
24.6 任务4:表示层开发641
24.6.1 迭代4.1:使用资源目录管理图片和图标资源641
24.6.2 迭代4.2:根据原型设计初步设计iPad故事板642
24.6.3 迭代4.3:根据原型设计初步设计iPhone故事板644
24.6.4 迭代4.4:首页模块644
24.6.5 迭代4.5:比赛项目模块645
24.6.6 迭代4.6:比赛日程模块649
24.6.7 迭代4.7:倒计时模块表示层652
24.6.8 迭代4.8:关于我们模块表示层653
24.6.9 迭代4.9:发布到GitHub654
24.7 任务5:收工654
24.7.1 迭代5.1:添加图标654
24.7.2 迭代5.2:设计和添加启动界面654
24.7.3 迭代5.3:植入谷歌AdMob横幅广告655
24.7.4 迭代5.4:性能测试与改善657
24.7.5 迭代5.5:发布到GitHub上658
24.7.6 迭代5.6:在App Store上发布应用658
24.8 小结658
《萌系美少女素描技法》内容简介:本书内容详尽,包括萌少女比例结构,萌少女头部、四肢、身体的绘制技法及萌少女动态造型的绘制,
《Web前端应用开发技术》内容简介:本书是一本介绍Web前端应用开发技术的图书,主要内容包括HTML5开发基础、CSS开发基础、JavaScri
Visio 2013图形设计从新手到高手-全彩印刷-超值多媒体光盘DVD 本书特色 visio 2013是微软公司所研发的办公软件之一, 也是目前市场上主流的绘...
《夏日走过山间》内容简介:他花了一整天的时间来观察群山之间光线的变化……万事万物都很平和, 这本不朽的文学名著写于一八六九年
《犀利销售》内容简介:如何成为一名成功的销售人员?本书由浅入深,分五个层次介绍不同阶段的销售人员所应具备的能力和素质。书中
《小大师 和梵高玩儿色彩》内容简介:这是一本帮助您指导孩子无拘无束地理解“什么是美”的书。本书主要针对5~10岁喜爱绘画或对绘
《女巫外卖:怪病围城》内容简介:莉莉被临时派到“女巫外卖”小雪斗城分店顶班,经过了初期的忙乱,就在外卖业务刚刚走上正轨的时
本书以独特的编辑理念展示了极具视觉冲击力的图像,这些作品既大气而又清晰准确地传达出它们所要表达的信息。本书集实用与艺术于
《CSS(使用指南)(影印版)》主要内容:层叠样式表(CSS)能让你内心的设计思想迸发出来并得以实现。不过,将CSS与网站底层的HTML页
《零基础:摄影入门超简单》内容简介:这是一本教摄影初学者快速拍出好照片的超简单的摄影书。书中包含了完整的摄影入门知识体系,
编辑推荐生活在昂首阔步,我们在原地驻足停留,有时候,我们要学会与回忆握手言别,将爱存留于心底,带着它赐予我们的力量,前行
《西南联大文学社团研究(精)》内容简介:本书是中华书局2011年版《季节燃起的花朵——西南联大文学社团研究》一书的增订本,共约
《TTT5.0培训师的大脑》内容简介:TTT技术自20世纪90年代进入中国培训市场,历经20多年的发展,几经迭代,已然进入TTT5.0阶段——大
《中风偏瘫家庭康复》内容简介:吴镇阳主编的《中风偏瘫家庭康复》简要介绍了中风防治的基本知识,详细阐述了中风偏瘫康复的基本知
《字不语》内容简介:《字不语:手写字体设计与应用方法解析》是一本关于手写体字形设计的书。《字不语:手写字体设计与应用方法解
DevelopersandsystemadministratorsalikeareuncoveringthetruepowerofXML,theExtensib...
ThefamousphysiciststimelesslecturesonthepromiseandlimitationsofcomputersWhen,in1...
《清华时间简史:美术学院(110校庆)》内容简介:清华大学美术学院的前身是1956年成立的中央工艺美术学院,1999年并入清华大学,更
《老子永远不老》内容简介:本书收入了12篇曹峰近年来发表的《老子》及道家研究论文,约二十万字。其中有对具体章节如三十六章、三
《怎样成为一名设计师》内容简介:头脑独立的设计师需要自己发现合理建议,也需要当代设计师面对的道德与实践问题的指南。《怎样