关东升
国内知名iOS技术作家,iOS技术顾问,高级培训讲师,移动开发专家。精通iOS、Android和Windows Phone及HTML5等移动开发技术。曾先后主持开发大型网络游戏神农诀的iOS和Android客户端开发,国家农产品追溯系统的iPad客户端开发,酒店预订系统的iPhone客户端开发,金融系统微博的iOS、Windows Phone 7、Android客户端开发。在App Store上发布多款游戏和应用软件,擅长移动平台的应用和游戏类项目开发。近期为中国移动研究院、云南移动、东软、方正科技、大唐电信、中石油、深圳康拓普、上海财富168、天津港务局等企事业单位授课。
著有《iOS网络编程与云端应用最佳实践》、《iPhone与iPad开发实战——iOS经典应用剖析》、《Android开发案例驱动教程》、《Android网络游戏开发实战》、《移动平台用户体验设计》以及《JSP网络程序设计》等图书。
目 录
第一部分 基础篇
第1章 开篇综述2
1.1 iOS概述2
1.1.1 iOS介绍2
1.1.2 iOS 6新特性2
1.2 开发环境及开发工具3
1.3 本书中的约定4
1.3.1 案例代码约定4
1.3.2 图示的约定5
第2章 第一个iOS应用程序7
2.1 创建基于nib的HelloWorld工程7
2.1.1 创建工程7
2.1.2 Xcode中的iOS工程模板10
2.1.3 应用剖析11
2.2 基于故事板的HelloWorld工程13
2.2.1 使用故事板重构HelloWorld14
2.2.2 nib、xib与故事板15
2.2.3 故事板中的Scene和Segue16
2.3 应用生命周期17
2.3.1 非运行状态——应用启动场景18
2.3.2 点击Home键——应用退出场景19
2.3.3 挂起重新运行场景20
2.3.4 内存清除——应用终止场景21
2.4 视图生命周期21
2.4.1 视图生命周期与视图控制器关系22
2.4.2 iOS 6 UI状态保持和恢复23
2.5 设置产品属性25
2.5.1 Xcode中的Project和Target25
2.5.2 设置常用的产品属性27
2.6 iOS API简介29
2.6.1 API概述29
2.6.2 如何使用API帮助31
2.7 小结33
第3章 iOS常用设计模式34
3.1 单例模式34
3.1.1 问题提出34
3.1.2 实现原理34
3.1.3 应用案例35
3.2 委托模式37
3.2.1 问题提出37
3.2.2 实现原理39
3.2.3 应用案例41
3.3 观察者模式44
3.3.1 问题提出44
3.3.2 实现原理45
3.3.3 通知机制和KVO机制47
3.4 MVC模式53
3.4.1 MVC模式概述53
3.4.2 Cocoa Touch中的MVC模式54
3.5 小结56
第4章 UIView与控件57
4.1 视图“始祖”——UIView57
4.1.1 UIView“家族”57
4.1.2 应用界面的构建层次59
4.1.3 视图分类60
4.2 标签控件和按钮控件60
4.2.1 标签控件61
4.2.2 按钮控件61
4.2.3 动作和输出口63
4.3 TextField控件和TextView控件66
4.3.1 TextField控件66
4.3.2 TextView控件67
4.3.3 键盘的打开和关闭67
4.3.4 关闭和打开键盘的通知68
4.3.5 键盘的种类69
4.4 开关控件、滑块控件和分段控件70
4.4.1 开关控件71
4.4.2 滑块控件71
4.4.3 分段控件71
4.5 网页控件WebView72
4.5.1 WebView介绍72
4.5.2 使用WebView构建Hybrid应用75
4.6 屏幕滚动控件ScrollView80
4.6.1 ScrollView属性的设置80
4.6.2 键盘与其他控件的协同84
4.7 等待相关的控件与进度条86
4.7.1 活动指示器ActivityIndicatorView87
4.7.2 进度条ProgressView88
4.8 警告框和操作表88
4.8.1 警告框AlertView89
4.8.2 操作表ActionSheet90
4.9 工具栏和导航栏92
4.9.1 工具栏92
4.9.2 导航栏94
4.10 屏幕布局98
4.10.1 iPad与iPhone屏幕布局98
4.10.2 绝对布局和相对布局99
4.10.3 使用AutoLayout布局102
4.10.4 旋转你的屏幕103
4.11 选择器108
4.11.1 日期选择器108
4.11.2 普通选择器110
4.11.3 数据源协议与委托协议112
4.12 iOS 6中的集合视图113
4.12.1 集合视图介绍114
4.12.2 集合视图单元格116
4.12.3 数据源协议与委托协议118
4.13 小结119
第5章 表视图120
5.1 概述120
5.1.1 表视图的组成120
5.1.2 表视图的相关类121
5.1.3 表视图分类122
5.1.4 单元格的组成和样式123
5.1.5 数据源协议与委托协议124
5.2 简单表视图125
5.2.1 创建简单表视图125
5.2.2 自定义单元格129
5.2.3 添加搜索栏133
5.3 分节表视图138
5.3.1 添加索引138
5.3.2 分组与静态表141
5.4 修改单元格144
5.4.1 删除和插入单元格144
5.4.2 移动单元格150
5.5 表视图UI设计模式152
5.5.1 分页模式152
5.5.2 下拉刷新模式152
5.5.3 iOS 6下拉刷新控件153
5.6 小结155
第6章 视图控制器与导航模式156
6.1 概述156
6.1.1 视图控制器的种类156
6.1.2 导航模式156
6.1.3 模态视图157
6.2 平铺导航163
6.2.1 应用场景163
6.2.2 基于分屏导航的实现165
6.2.3 基于分页导航的实现168
6.3 标签导航173
6.3.1 应用场景174
6.3.2 nib实现174
6.3.3 故事板实现179
6.4 树形结构导航182
6.4.1 应用场景182
6.4.2 nib实现183
6.4.3 故事板实现189
6.5 组合使用导航模式193
6.5.1 应用场景193
6.5.2 故事板实现194
6.6 小结200
第7章 iPhone与iPad应用开发的差异201
7.1 概述201
7.1.1 应用场景差异201
7.1.2 设计和开发需注意的问题201
7.1.3 构建自适应的iPhone和iPad工程204
7.2 iPad专用API206
7.2.1 UIPopoverController控制器206
7.2.2 UISplitViewController控制器209
7.2.3 模态视图专用属性215
7.3 Master-Detail应用程序模板219
7.3.1 nib实现220
7.3.2 故事板实现225
7.4 Utility应用程序模板228
7.4.1 nib实现229
7.4.2 故事板实现232
7.5 移动平台的分层架构设计234
7.5.1 低耦合企业级系统架构设计234
7.5.2 移动平台的分层架构设计235
7.5.3 基于同一工程的分层235
7.5.4 基于一个工作空间不同工程的分层241
7.6 小结244
第8章 应用程序设置245
8.1 概述245
8.1.1 设置245
8.1.2 配置246
8.2 应用程序设置包247
8.3 设置项目种类248
8.3.1 文本字段251
8.3.2 开关253
8.3.3 滑块254
8.3.4 值列表256
8.3.5 子界面257
8.4 读取设置259
8.5 小结260
第9章 应用程序本地化261
9.1 概述261
9.1.1 本地化内容261
9.1.2 本地化目录结构263
9.2 文本信息本地化263
9.2.1 系统按钮和信息本地化263
9.2.2 应用名称本地化265
9.2.3 程序代码输出的静态文本本地化266
9.2.4 使用genstring工具268
9.3 nib和故事板文件本地化268
9.3.1 添加本地化269
9.3.2 开关使用ibtool工具270
9.4 资源文件本地化271
9.5 小结273
第10章 数据持久化274
10.1 概述274
10.1.1 沙箱目录274
10.1.2 持久化方式275
10.2 属性列表275
10.3 对象归档280
10.4 使用SQLite数据库285
10.4.1 SQLite数据类型285
10.4.2 创建数据库285
10.4.3 查询数据287
10.4.4 修改数据290
10.5 Core Data292
10.5.1 ORM292
10.5.2 Core Data堆栈293
10.5.3 建模和生成实体296
10.5.4 采用Core Data分层架构设计299
10.5.5 查询数据301
10.5.6 修改数据302
10.6 小结304
第11章 访问通讯录305
11.1 概述305
11.2 读取联系人信息306
11.2.1 查询联系人记录307
11.2.2 读取单值属性309
11.2.3 读取多值属性311
11.2.4 读取图片属性313
11.3 写入联系人信息313
11.3.1 创建联系人315
11.3.2 修改联系人317
11.3.3 删除联系人318
11.4 高级API319
11.4.1 选择联系人319
11.4.2 显示和修改联系人322
11.4.3 创建联系人324
11.5 小结328
第二部分 网络篇
第12章 访问Web Service330
12.1 概述330
12.2 数据交换格式330
12.2.1 XML文档结构332
12.2.2 解析XML文档333
12.2.3 JSON文档结构340
12.2.4 JSON数据解码341
12.3 REST Web Service343
12.3.1 HTTP和HTTPS协议343
12.3.2 同步GET请求方法344
12.3.3 异步GET请求方法348
12.3.4 POST请求方式349
12.3.5 调用REST Web Service的插入、修改和删除方法350
12.4 使用ASIHTTPRequest框架355
12.4.1 安装和配置ASIHTTPRequest框架355
12.4.2 同步请求356
12.4.3 异步请求358
12.4.4 使用请求队列359
12.4.5 上传数据362
12.5 反馈网络信息改善用户体验364
12.5.1 iOS 6表视图刷新控件的使用364
12.5.2 使用等待指示器控件367
12.5.3 使用网络等待指示器369
12.6 小结370
第13章 定位服务与地图应用371
13.1 定位服务371
13.1.1 定位服务编程371
13.1.2 地理信息反编码376
13.1.3 地理信息编码查询377
13.1.4 关于定位服务的测试379
13.2 使用iOS 6苹果地图382
13.2.1 显示地图382
13.2.2 添加标注384
13.2.3 跟踪用户位置变化387
13.3 使用程序外地图388
13.3.1 调用iOS 6苹果地图388
13.3.2 调用谷歌Web地图391
13.4 小结392
第三部分 进阶篇
第14章 iOS中的商业模式394
14.1 收费策略394
14.1.1 iOS如何赚钱394
14.1.2 避免定价策略误区395
14.1.3 免费软件的艺术395
14.1.4 在适当的时间、适当的地点植入广告395
14.1.5 尝试不同的盈利模式395
14.2 使用苹果iAd广告396
14.2.1 横幅广告396
14.2.2 插页广告401
14.2.3 查看你的收入406
14.3 使用谷歌AdMob广告408
14.3.1 注册AdMob账号和管理应用408
14.3.2 下载谷歌AdMob Ads SDK和示例代码412
14.3.3 添加AdMob横幅广告414
14.3.4 添加AdMob插页广告418
14.3.5 为广告提交用户和位置信息421
14.3.6 搜索广告422
14.3.7 查看你的收入424
14.4 应用内购买425
14.4.1 概述425
14.4.2 测试环境搭建426
14.4.3 在程序中实现应用内购买431
14.4.4 测试应用内购买437
14.5 小结439
第15章 找出程序中的bug——调试440
15.1 Xcode调试工具440
15.1.1 定位编译错误440
15.1.2 查看和显示日志441
15.1.3 设置和查看断点442
15.1.4 调试工具栏446
15.1.5 输出窗口447
15.1.6 变量查看窗口448
15.1.7 查看线程449
15.2 日志与断言输出450
15.2.1 使用NSLog函数450
15.2.2 使用NSAssert宏451
15.2.3 移除NSLog和NSAssert452
15.3 LLDB调试工具455
15.3.1 断点命令455
15.3.2 观察点命令457
15.3.3 查看变量和计算表达式命令458
15.4 异常堆栈报告分析461
15.4.1 跟踪异常堆栈461
15.4.2 分析堆栈报告463
15.5 在iOS设备上调试464
15.5.1 创建开发者证书465
15.5.2 设备注册468
15.5.3 创建App ID470
15.5.4 创建配置概要文件471
15.5.5 设备调试473
15.6 Xcode设备管理工具474
15.6.1 管理设备配置概要文件474
15.6.2 查看设备上的应用程序475
15.6.3 设备控制台477
15.6.4 设备日志477
15.7 小结479
第16章 基于测试驱动的iOS开发480
16.1 测试驱动的软件开发概述480
16.1.1 测试驱动的软件开发流程480
16.1.2 测试驱动的软件开发案例481
16.1.3 iOS单元测试框架486
16.2 使用OCUnit测试框架486
16.2.1 添加OCUnit到工程中486
16.2.2 应用测试和逻辑测试489
16.2.3 编写OCUnit测试方法489
16.2.4 分析测试报告494
16.3 使用GHUnit测试框架495
16.3.1 添加GHUnit到工程496
16.3.2 编写GHUnit测试用例498
16.3.3 分析测试报告500
16.4 使用伪对象502
16.4.1 添加OCMock到工程503
16.4.2 使用OCMock对象505
16.5 iOS单元测试最佳实践507
16.5.1 iOS单元测试策略507
16.5.2 测试数据持久层507
16.5.3 测试业务逻辑层512
16.5.4 测试表示层515
16.6 小结522
第17章 让你的程序“飞”起来——性能优化523
17.1 内存优化523
17.1.1 内存泄漏问题的解决523
17.1.2 查找和解决僵尸对象531
17.1.3 autorelease的使用问题534
17.1.4 响应内存警告534
17.1.5 选择nib还是故事板536
17.2 优化资源文件537
17.2.1 图片文件优化537
17.2.2 音频文件优化538
17.3 延迟加载539
17.3.1 资源文件的延迟加载540
17.3.2 故事板和nib文件的延迟加载543
17.4 数据持久化的优化546
17.4.1 使用文件546
17.4.2 使用SQLite数据库549
17.4.3 使用Core Data550
17.5 可重用对象的使用552
17.5.1 表视图中的可重用对象553
17.5.2 集合视图中的可重用对象554
17.5.3 地图视图中的可重用对象555
17.6 并发处理与多核CPU556
17.6.1 主线程阻塞问题556
17.6.2 选择NSThread还是GCD557
17.7 编译器和编译参数558
17.7.1 GCC、LLVM GCC与Apple LLVM比较558
17.7.2 ARM架构559
17.7.3 Optimization Level561
17.8 小结562
第18章 管理好你的程序代码——代码版本控制563
18.1 概述563
18.1.1 版本控制历史563
18.1.2 基本概念564
18.2 Git代码版本控制564
18.2.1 服务器搭建564
18.2.2 Gitolite服务器管理566
18.2.3 Git常用命令568
18.2.4 Git分支570
18.2.5 Git协同开发574
18.2.6 Xcode中Git的配置与使用576
18.3 GitHub代码托管服务583
18.3.1 创建和配置GitHub账号584
18.3.2 创建代码库586
18.3.3 派生代码库589
18.3.4 使用GitHub协同开发591
18.3.5 管理组织596
18.4 小结599
第19章 把你的应用放到App Store上600
19.1 收官600
19.1.1 添加图标600
19.1.2 添加启动界面602
19.1.3 调整Application Target属性604
19.1.4 为发布进行编译605
19.1.5 应用打包609
19.2 发布流程610
19.2.1 创建应用及基本信息611
19.2.2 应用定价信息612
19.2.3 最后信息输入613
19.2.4 上传应用616
19.3 常见审核不通过的原因618
19.4 小结619
第四部分 实战篇
第20章 重构MyNotes应用——iOS网络通信中的设计模式与架构设计622
20.1 移动网络通信应用的分层架构设计622
20.2 基于委托模式实现623
20.2.1 网络通信与委托模式623
20.2.2 在异步网络通信中使用委托模式实现分层架构设计623
20.2.3 类图624
20.2.4 时序图626
20.2.5 数据持久层的代码实现629
20.2.6 业务逻辑层的代码实现631
20.2.7 表示层的代码实现632
20.3 基于观察者模式的通知机制实现637
20.3.1 观察者模式的通知机制回顾637
20.3.2 异步网络通信中通知机制的分层架构设计638
20.3.3 类图638
20.3.4 时序图639
20.3.5 数据持久层的代码实现642
20.3.6 业务逻辑层的代码实现643
20.3.7 表示层的代码实现644
20.4 小结649
第21章 iOS敏捷开发项目实战——2016里约热内卢奥运会应用开发及App Store发布650
21.1 应用分析与设计650
21.1.1 应用概述650
21.1.2 需求分析650
21.1.3 原型设计651
21.1.4 数据库设计652
21.1.5 架构设计652
21.2 iOS敏捷开发653
21.2.1 敏捷开发宣言653
21.2.2 iOS适合敏捷开发?654
21.2.3 iOS敏捷开发最佳实践654
21.3 任务1:创建应用基本工作空间656
21.4 任务2:信息系统层与持久层开发657
21.4.1 迭代2.1:编写数据库DDL脚本657
21.4.2 迭代2.2:插入初始数据到数据库658
21.4.3 迭代2.3:编写实体类658
21.4.4 迭代2.4:DAO类GHUnit单元测试659
21.4.5 迭代2.5:编写DAO类663
21.4.6 迭代2.6:发布到GitHub666
21.5 任务3:业务逻辑层开发667
21.5.1 迭代3.1:比赛项目业务逻辑类GHUnit单元测试667
21.5.2 迭代3.2:编写比赛项目业务逻辑类668
21.5.3 迭代3.3:比赛日程业务逻辑类GHUnit单元测试669
21.5.4 迭代3.4:编写比赛日程业务逻辑类670
21.5.5 迭代3.5:发布到GitHub672
21.6 任务4:表示层开发672
21.6.1 迭代4.1:根据原型设计初步设计iPad故事板673
21.6.2 迭代4.2:根据原型设计初步设计iPhone故事板674
21.6.3 迭代4.3:首页模块674
21.6.4 迭代4.4:比赛项目模块675
21.6.5 迭代4.5:比赛日程模块679
21.6.6 迭代4.6:倒计时模块表示层681
21.6.7 迭代4.7:关于我们模块表示层683
21.6.8 迭代4.8:发布到GitHub683
21.7 任务5:收工684
21.7.1 迭代5.1:添加图标684
21.7.2 迭代5.2:设计和添加启动界面684
21.7.3 迭代5.3:植入谷歌AdMob横幅广告685
21.7.4 迭代5.4:性能测试与改善686
21.7.5 迭代5.5:发布到GitHub687
21.7.6 迭代5.6:在App Store上发布应用687
21.8 小结690
《一本书看透价值投资》内容简介:在本书中,两位作者根据自身近20余的价值投资实战经验,分享如何去判断一家企业的价值,如何挖掘
《花朵主义者的告白》内容简介:二战时期有这样一个动人的小故事,战争过后的巴黎一片废墟,整个城市圣灵涂炭。一个美国人很担心地
2001年6月,日本国际交流基金会北京事务所和朱锷设计事务所共同策划了一次海报展览会。这部海报作品集中刊登的142幅海报作品是为
office2007实用办公技巧从新手到高手 本书特色 《Office 2007实用办公技巧从新手到高手》:50余个实例与实例素材,多媒体视频教学文件,赠送全面...
《“创新报国70年”大型报告文学丛书:唤醒沉睡的盐湖》内容简介:祖国大地上分布着众多的盐湖,每一座盐湖都蕴藏着丰富的资源。为
《个人发起型非营利组织研究》内容简介:本书讲了一个学术版的故事,其在一定理论框架下的叙事,呈现了一个由个人发起的非营利组织
Railsislarge,powerful,andnew.Howdoyouuseiteffectively?Howdoyouharnessthepower?An...
Cryptographyplaysakeyroleinensuringtheprivacyandintegrityofdataandthesecurityofc...
《1936—1941年日本对德同盟政策研究》内容简介:20世纪三四十年代,日本发动的侵华战争给中国社会发展带来了严重影响。从九一八事
本书全面、深入地介绍了数字通信系统的基础理论和应用,内容包括数字调制和编码的基本理论以及频谱扩展通信、蜂窝式无线电通信和
《CSS入门经典(第2版)》主要内容:CSSLevel1、2、2.1和3规范的相关知识、操纵文本和选择字体效果的方式、IE6和IE7的Bug及解决方案
《纽埃》内容简介:纽埃位于南太平洋地区,是“波利尼西亚之礁”的一部分。纽埃全国由14个村庄构成,农业与旅游业是主要经济支柱。
《童年的秘密》内容简介:本书详尽地告诉父母,儿童的成长有着其内在的精神驱动和规律,儿童的成长需要依靠他们自身不断的有意识的
计算机组成原理-学习指导与习题解答 本书特色 本套教材在原国家“九五”规划教材的基础上,按照“计算机学科教学计划2001”进行全面更新,以适应高校计算机专业课程...
网络共和国 本书特色 东方编译所译丛。 科技的发展越来越展现出双刃剑的特征,凯斯·桑斯坦在本书中即探讨了网络对个人行为以及整个社会的影响:信息随时获取同时带来“...
《守望一朵花开》内容简介:《每天读点好英文:守望一朵花开》内容简介::“每天读点好英文”系列升级版是专为有提高英文水平需要和
《大学物理教程》是教育部“高等教育面向21世纪教学内容和课程体系改革计划”的研究成果,是“面向21世纪课程教材”、高等教育“
《版本源流與正史校勘》内容简介:本书汇集的研究主要是依托中华书局“点校本《二十四史》及《清史稿》修订工程”而展开的。这些文
《男人使用手册》内容简介:对于女人来说,男人是一个出口,一旦女人爱上男人,她便开始了一段出走,世界颠倒,灵魂出走,走出自己
《讲述中国历史》内容简介:这是一部美国历史学家魏斐德从全球范围来解析中国历史的著作,堪称其40年中国史研究集大成之作!内容涵