内容简介:
关东升
国内知名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网络程序设计》等图书。
作者简介:
关东升
国内知名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
文章试读:苹果公司于2008年3月6日发布了iPhone和iPod touch的应用程序开发包,其中包括Xcode开发工具、iPhone SDK和iPhone手机模拟器。第一个Beta版本是iPhone SDK 1.2b1(build 5A147p),发布后立即就能使用,但是同时推出的App Store所需要的固件更新直到2008年7月11日才发布。编写本书时,iOS SDK 6.1.2版本已经发布。 ...
(查看全部试读)