iOS开发指南:从零基础到App Store上架(第3版)

更多详情


内容简介: 《iOS开发指南 从零基础到App Store上架(第3版)》以Swift和Objective-C语言为基础进行讲解,共分4篇:第一篇为基础篇,主要讲解iOS的一些基础知识;第二篇为网络篇,主要讲解iOS网络开发的相关知识;第三篇为进阶篇,介绍了iOS高级内容、商业思考等;最后一篇是实战篇,通过两个真实的项目,带领读者身临其境地完成一个项目的开发,使读者了解整个开发过程以及开发中的技巧。

目录: 第1章 开篇综述 5
1.1 iOS概述 5
1.1.1 iOS介绍 5
1.1.2 iOS 8的新特性 5
1.2 开发环境及开发工具 6
1.3 本书中的约定 8
1.3.1 案例代码约定 8
1.3.2 图示的约定 9
1.3.2 方法命名约定 11
第2章 第一个iOS应用程序 12
2.1 创建HelloWorld工程 12
2.1.1 创建工程 13
2.1.2 Xcode中的iOS工程模板 18
2.1.3 应用剖析 20
2.2 HelloWorld工程中的故事板文件 22
2.2.1 故事板的导航特点 22
2.2.2 故事板中的Scene和Segue 24
2.3 应用生命周期 24
2.3.1 非运行状态——应用启动场景 27
2.3.2 点击Home键——应用退出场景 27
2.3.3 挂起重新运行场景 30
2.3.4 内存清除——应用终止场景 31
2.4 视图生命周期 31
2.5 设置产品属性 33
2.5.1 Xcode中的Project和Target 33
2.5.2 设置常用的产品属性 37
2.6 iOS API简介 38
2.6.1 API概述 38
2.6.2 如何使用API帮助 41
2.7 小结 44
第3章 UIView与视图 44
3.1 视图“始祖”——UIView 44
3.1.1 UIView“家族” 44
3.1.2 应用界面的构建层次 47
3.1.3 视图分类 49
3.2 标签与按钮 50
3.2.1 标签控件 50
3.2.2 按钮控件 52
3.3 动作与输出口 55
3.4 TextField和TextView 59
3.4.1 TextField控件 60
3.4.2 TextView控件 60
3.4.3 键盘的打开和关闭 62
3.4.4 关闭和打开键盘的通知 63
3.4.5 键盘的种类 64
3.5 开关控件、滑块控件和分段控件 65
3.5.1 开关控件 66
3.5.2 滑块控件 66
3.5.3 分段控件 67
3.6 网页视图WebView 67
3.7 等待相关的控件与进度条 72
3.7.1 活动指示器ActivityIndicatorView 73
3.7.2 进度条ProgressView 73
3.8 警告框和操作表 75
3.8.1 警告框 75
3.8.2 操作表ActionSheet 77
3.8.3 使用iOS 8 UIAlertController实现 79
3.9 工具栏和导航栏 80
3.9.1 工具栏 81
3.9.2 导航栏 84
3.10 小结 88
第4章 iOS 8多分辨率屏幕适配 88
4.1 iOS 8屏幕的多样性 88
4.1.1 iOS 8屏幕介绍 88
4.1.2 iOS 8的三种分辨率 90
4.1.3 获得iOS设备屏幕信息 90
4.2 iOS屏幕布局 92
4.2.1 iOS中的“栏” 92
4.2.2 传统布局 93
4.3 Auto Layout布局 96
4.3.1 Interface Builder中管理Auto Layout约束 96
4.3.2 实例:Auto Layout布局 97
4.4 Size Class与iOS 8多屏幕适配 103
4.4.1 Interface Builder中使用Size Class 104
4.4.2 Size Class的九宫格 105
4.4.3 实例:使用Size Class 106
4.5 屏幕滚动视图中使用Auto Layout和Size Class 113
4.5.1 屏幕滚动视图重要的属性 113
4.5.2 屏幕滚动视图实例 116
4.6 使用资源目录(Asset catalog)管理图片 121
4.7 小结 125
第5章 委托协议、数据源协议与高级视图 125
5.1 视图中委托协议和数据源协议 125
5.2 选择器 126
5.2.1 日期选择器 126
5.2.2 普通选择器 128
5.2.3 数据源协议与委托协议 132
5.3 集合视图 134
5.3.1 集合视图介绍 134
5.3.2 实例:奥运会比赛项目 135
5.3.3 添加集合视图控制 137
5.3.4 添加集合视图单元格 140
5.3.5 数据源协议与委托协议 144
5.4 小结 145
第6章 表视图 145
6.1 概述 146
6.1.1 表视图的组成 146
6.1.2 表视图的相关类 147
6.1.3 表视图分类 148
6.1.4 单元格的组成和样式 151
6.1.5 数据源协议与委托协议 155
6.2 简单表视图 155
6.2.1 创建简单表视图 155
6.2.2 自定义单元格 162
6.2.3 添加搜索栏 166
6.3 分节表视图 173
6.3.1 添加索引 174
6.3.2 分组 177
6.3.3 静态表与控制界面布局 178
6.4 修改单元格 184
6.4.1 删除和插入单元格 184
6.4.2 移动单元格 192
6.5 表视图UI设计模式 196
6.5.1 分页模式 196
6.5.2 下拉刷新模式 197
6.5.3 下拉刷新控件 197
6.6 小结 201
第7章 视图控制器与导航模式 201
7.1 概述 201
7.1.1 视图控制器的种类 201
7.1.2 导航模式 202
7.1.3 模态视图 203
7.2 平铺导航 211
7.2.1 应用场景 211
7.2.2 基于分屏导航的实现 213
7.2.3 基于电子书导航的实现 220
7.3 标签导航 226
7.3.1 应用场景 227
7.3.2 实现 228
7.4 树形结构导航 232
7.4.1 应用场景 232
7.4.2 实现 233
7.5 组合使用导航模式 242
7.5.1 应用场景 242
7.5.2 实现 243
7.6 小结 250
第8章 iOS常用设计模式 251
8.1 单例模式 251
8.1.1 问题提出 251
8.1.2 Objective-C实现原理 251
8.1.3 Swift实现原理 252
8.1.4 应用案例 253
8.2 委托模式 255
8.2.1 问题提出 255
8.2.2 实现原理 257
8.2.3 应用案例 260
8.3 观察者模式 264
8.3.1 问题提出 264
8.3.2 实现原理 265
8.3.3 通知机制和KVO机制 266
8.4 MVC模式 274
8.4.1 MVC模式概述 274
8.4.2 Cocoa Touch中的MVC模式 275
8.5 小结 278
第9章 iPhone与iPad应用开发的差异 278
9.1 概述 278
9.1.1 应用场景差异 278
9.1.2 设计和开发需注意的问题 278
9.2 iPad专用API 281
9.2.1 UIPopoverController控制器 281
9.2.2 UISplitViewController控制器 287
9.3 小结 293
第10章 iOS分层架构设计 294
10.1 低耦合企业级系统架构设计 294
10.2 iOS分层架构设计 295
10.2.1 工程与工作空间 295
10.2.2 静态链接库 296
10.2.3 框架 296
10.2.4 10种分层模式 297
10.3 实例:MyNotes应用 298
10.4 基于同一工程的分层 300
10.4.1 采用纯Swift语言实现——PSSS模式 300
10.4.2 采用纯Objective-C语言实现——POOO模式 303
10.4.3 采用Swift调用Objective-C混合搭配实现——PSOO模式 306
10.5 基于同一工作空间静态链接库实现的WLSOO模式 308
10.5.1 使用工作空间 308
10.5.2 添加数据持久层工程 308
10.5.3 业务逻辑层与数据持久层依赖关系建立 310
10.5.4 表示层与业务逻辑层依赖关系建立 312
10.6 基于同一工作空间框架实现的WFSSS模式 312
10.6.1 创建框架工程 312
10.6.2 依赖关系建立 313
10.6.3 代码重构 315
10.7 基于同一工作空间框架实现的WFOOO模式 316
10.7.1 设置Public头文件 316
10.7.2 表示层与业务逻辑层依赖关系建立 317
10.7.3 代码重构 317
10.8 基于同一工作空间框架实现的WFSOO模式 317
10.8.1 设置Public头文件 318
10.8.2 表示层与业务逻辑层依赖关系建立 318
10.8.3 代码重构 318
10.9 基于同一工作空间框架实现的WFOSS模式 319
10.9.1 设置Public头文件 319
10.9.2 代码重构 319
10.10 小结 320
第11章 数据持久化 320
11.1 概述 320
11.1.1 沙箱目录 320
11.1.2 持久化方式 321
11.2 属性列

前言: 北京时间2014年6月2日凌晨1点,苹果公司发布了最新的iOS 8系统。此次,最令人震撼的消息是苹果的新语言Swift。而iOS开发者和感兴趣者立即开始研究和学习Swift语言,我们智捷课堂团队在2014年6月9日推出一套完整的Swift学习视频,接着又与图灵教育合作,推出国内第一本Swift图书——《Swift开发指南》,并且在2014年8月1日推出了《Swift开发指南(修订版)》。在这个大背景下,我们原来编写的《iOS开发指南:从零基础到App Store上架》得到了广大读者的认可,很多读者希望我们将其升级为iOS 8版本,并且能够使用Swift和Objective-C两种语言进行讲解,并比较它们的不同之处。几个月过去了,我们终于在2015年元旦之前将书稿提交给出版社。
内容和组织结构
本书是我们团队编写的iOS系列丛书中的一本,目的是使有Swift或Objective-C基础的程序员通过学习本书,从零基础学习如何在App Store上发布一款应用。全书共4部分。
第一部分为基础篇,共14章内容,介绍了iOS的一些基础知识。
第1章介绍了iOS的开发背景以及本书约定。
第2章使用故事板技术创建了HelloWorld,同时讨论了iOS工程模板、应用的运行机制和生命周期、视图的生命周期等,最后介绍了如何使用API帮助文档和官方案例。
第3章首先学习了视图和控件之间的关系以及应用界面的构建层次,然后介绍了标签、按钮、文本框和导航栏等基本控件。
第4章介绍了iOS 8多分辨率屏幕适配方法,其中涉及的技术主要是Auto Layout和Size Class。此外,还介绍了iOS屏幕的多样性、iOS屏幕布局相关的内容。
第5章首先向大家介绍了数据源协议和委托协议,然后介绍了高级视图:选择器和集合视图。
第6章探讨了表视图的组成、表视图类的构成和表视图的分类,使我们对表视图有了一个整体上的认识。接下来,介绍了如何实现简单表视图和分节表视图,以及表视图中索引、搜索栏和分组的使用,然后学习了如何对表视图单元格进行删除、插入、移动等操作,最后介绍了表视图UI设计模式方面的内容。
第7章讨论了如何判断应用是否需要一个导航功能,并且知道在什么情况下选择平铺导航、标签导航、树形结构导航,或者同时综合使用这3种导航模式。
第8章讨论了iOS开发中4种常用的设计模式,分别为单例模式、委托模式、观察者模式和MVC模式。在介绍每种设计模式时,我们按照问题提出、实现原理、应用案例的结构介绍了其适用情况、实现原理及其用法。
第9章首先介绍了iPhone和iPad设备使用场景上的差异,然后深入介绍了iPad专用API,包括UIPopover- Controller控制器和UISplitViewController控制器。
第10章介绍了iOS平台的分层架构设计技术,归纳了10种分层模式,并且重点实现了8种模式,每一种模式都有其应用场景。
第11章讨论了iOS本地数据持久化的问题。首先分析了数据存取的几种方式以及每种数据存取方式适合什么样的场景,然后分别举例介绍了每种存取方式的实现。
第12章介绍了设置和配置的概念,然后通过对二者差异的探讨,介绍了什么样的项目适合放在设置里,什么样的项目适合放在配置里。
第13章首先介绍了国际化的概念,接下来详细阐述了文本信息、xib及故事板、资源文件的国际化。
第14章首先介绍了访问通讯录所需要的框架,然后介绍了使用AddressBook框架如何读取联系人的信息,具体包括联系人记录、单值多值属性、图片属性的读取;接着介绍了如何使用该框架将联系人信息写入数据库,具体包括联系人的创建、修改和删除;最后介绍了如何使用AddressBook高级API实现选择联系人、显示和修改联系人以及创建联系人的操作。
第二部分为网络篇,共两章,介绍了iOS网络开发的相关知识。
第15章介绍了数据交换格式,其中XML和JSON是主要的方式。这里重点介绍了Web Service的访问以及MKNetworkKit框架。
第16章讨论了iOS中的定位服务技术,包括地理信息编码和反编码查询。之后介绍了iOS苹果地图的使用,包括显示地图、在地图上添加标注以及跟踪用户位置的变化等。最后,介绍了程序外地图的使用,如何调用iOS苹果地图和谷歌Web地图。
第三部分为进阶篇,共6章,介绍了iOS高级内容和商业思考等,相关内容如下所示。
第17章介绍了iOS中的商业模式,其中的收费策略值得广大读者借鉴。此外,我们还介绍了植入广告和应用内购买的API,其中植入广告包括苹果自己的iAd和谷歌的AdMob广告。
第18章首先介绍了调试工具、异常堆栈报告分析,接下来讲解了如何在真机上调试应用,最后分析了Xcode设备管理工具的用法。
第19章首先介绍了测试驱动的iOS开发,接着介绍了单元测试框架XCTest、异步单元测试和性能测试,最后讨论了iOS单元测试最佳实践。
第20章介绍了iOS中的性能优化方法,其中包括内存优化、资源文件优化、延迟加载、持久化优化、使用可重用对象、并发处理与多核CPU等。
第21章介绍了如何使用Git进行代码版本控制,其中包括Git服务器的搭建、Git常用命令和协同开发。此外,还介绍了在Xcode中如何配置和使用Git工具。
第22章探讨了如何在App Store上发布应用,介绍了应用的发布流程以及应用审核不通过的一些常见原因。
第四部分为实战篇,共两章,从无到有地介绍了两个真实的iOS应用:MyNotes应用和2016里约热内卢奥运会应用。
第23章通过重构MyNotes应用,把MyNotes应用的数据由原来的本地存储变成云存储。在这个过程中,我们介绍了移动网络通信应用中分层架构设计的必要性和重要性。我们重点介绍了基于委托模式和观察者模式通知机制实现的分层架构设计。
第24章介绍了完整的iOS应用分析设计、编程、测试和发布过程,其中采用了敏捷开发方法。此外,该项目采用分层架构设计,这对于学习iOS架构是非常重要的。
书中并没有包括多媒体等知识,我们会在另外一本iOS开发书中介绍,具体进展请读者关注智捷iOS课堂官方网站http://www.51work6.com。
本书服务网址
为了更好地为广大读者提供服务,我们专门为本书建立了一个服务网址www.51work6.com/ios1.php,大家可以查看相关出版进度,并对书中内容发表评论,提出宝贵意见。
源代码
书中包括了100多个完整的案例项目源代码,大家可以到本书网站www.51work6.com/ios1.php下载或者到图灵社区本书主页(www.ituring.com.cn/book/1629)免费注册下载。
勘误与支持
我们在网站www.51work6.com/ios1.php中建立了一个勘误专区,可以及时地把书中的问题、失误和纠正反馈给广大读者。如果你发现了任何问题,均可以在网上留言,也可以发送电子邮件到eorient@sina.com,我们会在第一时间回复你。此外,你也可以通过新浪微博与我们联系,我的微博为@tony_关东升 。
致谢
在此感谢图灵的王军花责编给我们提供的宝贵意见,感谢智捷iOS课堂团队的李玉超和贾云龙参与内容讨论和审核,感谢赵大羽老师手绘了书中全部草图,并从专业的角度修改书中图片,力求更加真实完美地奉献给广大读者。此外,还要感谢我的家人容忍我的忙碌,以及对我的关心和照顾,使我能抽出这么多时间,投入全部精力专心编写此书。
由于时间仓促,书中难免存在不妥之处,请读者原谅。

关东升
2014年12月于北京

媒体评论: 本书适用于广大iOS开发者,前两版就得到了广大开发者的好评。这一版在之前内容的基础上针对iOS 8进行了更新,并用Swift和Objective-C两种语言对比介绍了iOS开发。本书内容涉及iOS开发的方方面面,同时又突出重点,并且使用大量实例代码和插图帮助开发者更好地理解书中的内容。它不仅是初级开发者的入门教程,也可以作为高级开发者在闲暇之余翻阅的工具书。
——CocoaChina社区
“本书前两版均受到了51CTO社区广大iOS开发者和爱好者的好评和认可。与前两版不同的是,本书采用Swift和Objective-C两种语言进行介绍,讨论了iOS 8开发中常用的新特性、新功能。这本书不仅可以帮助iOS初学者迅速掌握iOS开发技能,而且可以帮助程序员系统全面地梳理知识,提高开发水平。在iOS开发的道路上,它定能助你一臂之力。”
  ——曹亚莉,51CTO博客总编,51CTO学院高级产品运营经理
  “本书结合大量案例讲述了iOS应用开发的技巧,无疑是一本值得初学者认真阅读的从入门到精通的教材。第3版在前两版的基础上增加了iOS 8的新技术,对比介绍了Swift和Objective-C两种语言,使读者更容易掌握这两种语言的区别,同时突出了扁平化的设计理念。本书将是你踏入iOS殿堂的黄金阶梯!”
  ——9ria游戏开发者社区
  “本书通俗易懂,全面覆盖了iOS 8的新特性及要点,并且对比讲解了使用Objective-C和Swift来实现iOS 8开发的差异。在第三篇中,作者总结并分享了以往开发过程中的经验和心得,很值得借鉴。相信本书对广大iOS开发者会有很大的帮助。”
  ——智捷课堂