新書推薦:
《
虚拟资本:金融怎样挪用我们的未来
》
售價:HK$
77.3
《
刻意练习不生气
》
售價:HK$
39.2
《
大宋理财:青苗法与王安石的金融帝国(全彩插图本)
》
售價:HK$
109.8
《
安全感是内心长出的盔甲
》
售價:HK$
67.0
《
快人一步:系统性能提高之道
》
售價:HK$
110.9
《
我们为什么会做梦:让梦不再神秘的新科学
》
售價:HK$
77.3
《
算法图解(第2版)
》
售價:HK$
78.2
《
科学的奇幻之旅
》
售價:HK$
77.3
|
內容簡介: |
本书聚焦在APP产品的设计、开发和运营层面,特别强调架构和设计模式的重要性,有意识地将设计模式应用到代码的编写中,重点介绍iOS企业级应用开发的设计思维方式,并与全栈开发技术结合起来。全书分为iOS基础篇、Web与Native混合开发模式篇和全栈开发技术篇。iOS基础篇主要介绍iOS基础知识、多种设计模式下的视图控制器之间的传值、App与服务器接口的定义、CollectionView的应用;Web与Native混合开发模式篇主要介绍Block的应用、iOS网络请求、JavaScript基础、Web与Native的交互;全栈开发技术篇主要介绍Node.js、Express、AngularJS、MongoDB、MEAN全栈技术的实现。
|
關於作者: |
和凌志,客座教授,工信部人才交流中心认证讲师;拥有十多年移动互联网开发经验,先后在 Siemens Mobile、 Flextronics 等欧美公司担任手机软件架构师。2014年, 为北京高校录制慕课iOS企业级应用开发技术。近几年,专注于全栈技术开发, 代表产品有点时APP 轻量级知识分享平台。
|
目錄:
|
目录
iOS基础篇
第1章iOS基础知识2
1.1Objective-C语法简介2
1.1.1Objective-C的奇特之处2
1.1.2如何声明一个实例变量4
1.1.3Objective-C字符串5
1.2Objective-C的对象类型与基本数据类型6
1.2.1对象类型与基本数据类型的混合使用6
1.2.2对象类型与基本数据类型的转换7
1.3不可变数组与可变数组7
1.3.1不可变数组(NSArray)的特征8
1.3.2可变数组(NSMutableArray)的特征8
1.3.3如何遍历数组中的对象8
1.3.4NSArray与NSMutableArray的应用10
1.4不可变字典与可变字典11
1.4.1不可变字典(NSDictionary)11
1.4.2可变字典(NSMutableDictionary)12
1.4.3如何遍历字典中的对象12
1.4.4NSArray与NSDictionary的应用13
1.4.5创建类的对象13
1.5iOS应用程序概述14
1.5.1应用程序的入口14
1.5.2应用程序委托(AppDelegate)14
1.5.3UIApplication应用场景15
1.5.4一种简单的永久数据存储方式16
1.6iOS定制化控件17
1.6.1定制化View的创建17
1.6.2小标签(UILabel),大用场19
1.6.3如何实现输入框随键盘上移20
1.7视图的层级管理23
1.7.1创建视图的方法23
1.7.2如何从父视图中移除子视图25
1.7.3登录页面的实现26
1.8iOS编程规范28
1.8.1代码的可维护性29
1.8.2面向对象的编程思想29
1.8.3优先编写轻量级的ViewController30
1.9小结31
第2章视图控制器之间的传值32
2.1通过Delegate实现ViewController之间的传值32
2.1.1Delegate概述32
2.1.2学习Delegate的困惑32
2.1.3从一道经典的面试题说起33
2.1.4学习Delegate常出现的几个误区33
2.1.5Delegate技术难点在哪里34
2.1.6数据逆向传送一定要通过Delegate吗34
2.1.7Delegate应用五步曲35
2.1.8Delegate优势38
2.2通过单例实现ViewController之间的传值38
2.2.1单例的创建39
2.2.2单例的初始化40
2.2.3单例设计模式的本质41
2.2.4通过单例实现传值41
2.2.5单例模式在登录模块中的应用42
2.2.6单例模式的优势44
2.3通过KVO实现ViewController之间的传值44
2.3.1什么是KVC44
2.3.2什么是KVO45
2.3.3KVO的特点46
2.3.4使用KVO的步骤46
2.3.5KVO的实现方法46
2.3.6KVO应用注意事项50
2.4通过NSNotification实现ViewController之间的传值50
2.4.1NSNotification的定义51
2.4.2NSNotificationCenter51
2.4.3发出通知51
2.4.4接收通知52
2.4.5移除通知52
2.4.6异步模式下的通知操作53
2.4.7通过NSNotification实现ViewController之间的传值53
2.4.8NSNotification与Delegate的区别55
2.4.9监听系统自带的NSNotification56
2.5小结58
第3章App与服务器接口的定义59
3.1关于JSON的认识59
3.2App与服务器接口的定义61
3.2.1App与后台的接口设计61
3.2.2后台返回的数据格式61
3.2.3后台返回的提示信息62
3.3JSON与Model的转换62
3.3.1JSONModel常见的用法63
3.3.2JSONModel的几个属性用法67
3.4小结69
第4章CollectionView的应用70
4.1CollectionView与TableView孰优孰劣70
4.1.1TableView的应用场景70
4.1.2CollectionView的应用场景71
4.1.3CollectionView与TableView概念对比71
4.1.4CollectionView与TableView的性能对比71
4.2什么是UICollectionView71
4.3实现一个简单的UICollectionView72
4.4UICollectionViewCell视图层级73
4.5UICollectionViewDataSource74
4.6关于Cell的重用74
4.7UICollectionViewDelegate75
4.8UICollectionViewLayout76
4.9实现一个简单的瀑布流77
4.9.1通过手动编码创建UICollectionView78
4.9.2直接拖曳一个CollectionViewController81
4.9.3基于Xib创建一个UICollectionViewCell86
4.10自定义瀑布流的应用场景88
4.11自定义Flow Layout进行瀑布流布局88
4.11.1自定义瀑布流的应用场景89
4.11.2自定义瀑布流的实现思路90
4.11.3创建自定义的Flow Layout90
4.11.4创建自定义的CollectionViewCell92
4.11.5关于initWithFrame:方法的使用93
4.11.6自定义瀑布流的完整实现94
4.11.7UICollectionView相关的类图96
4.11.8如何实现UICollectionView的轮播97
4.12CollectionView与TableView的区别98
4.13图片轮播的实现思路98
4.14CollectionView注意事项99
4.15小结100
Web与Native混合开发模式
第5章Block的应用102
5.1Block缘起102
5.2Block概述103
5.3Block的声明、实现与调用104
5.3.1Block的声明104
5.3.2Block的实现106
5.3.3Block的调用108
5.3.4Block外部变量的访问109
5.4Block的应用场景110
5.4.1Block用于completionHandler110
5.4.2Block声明为实例变量113
5.4.3typedef Block114
5.5通过Block实现视图控制器之间的逆向传值115
5.5.1应用场景115
5.5.2代码实现115
5.6小结118
第6章iOS网络请求119
6.1iOS网络请求概述119
6.2AFNetworking的应用119
6.2.1AFNetworking概述119
6.2.2AFNetworking框架使用方法121
6.2.3影响网络请求的几个条件122
6.2.4善用URL宏定义124
6.2.5URl接口应统一管理124
6.2.6AFNetworking的二次封装126
6.3AFNetworking的序列化问题126
6.3.1AFNetworking请求格式127
6.3.2AFNetworking响应格式128
6.4异步请求数据并刷新UI页面128
6.5远程文件下载130
6.5.1基于AFNetworking的文件下载130
6.5.2基于NSURLSession的文件下载132
6.5.3网络安全访问设置133
6.6小结134
第7章JavaScript基础135
7.1JavaScript语法135
7.2变量的声明与赋值136
7.3如何判断两个字符串是否相等137
7.4创建JavaScript对象的三种方法138
7.5函数声明与函数表达式140
7.6可立即调用的函数表达式143
7.7循环的实现145
7.8防止JavaScript自动插入分号146
7.9 严格模式147
7.10如何运行与调试JavaScript代码148
7.10.1把JavaScript代码内嵌到HTML页面中148
7.10.2通过Node.js运行JavaScript代码150
7.11JavaScript的面向对象设计思想150
7.12JavaScript的异步编程模式151
7.12.1Promise对象152
7.12.2生成Promise实例对象152
7.12.3Promise原型方法154
7.12.4Promise的catch方法154
7.13如何在HTML中嵌入JavaScript155
7.13.1<script>标签155
7.13.2<script>标签的位置156
7.13.3嵌入JavaScript代码与外部文件引用157
7.14JavaScript与JSON157
7.15小结158
第8章Web与Native的交互159
8.1混合开发模式概述159
8.1.1Webkit简介159
8.1.2JavaScriptCore简介160
8.1.3Objective-C调用JavaScript160
8.2网页调用iOS的原生方法162
8.2.1应用场景162
8.2.2技术实现思路163
8.2.3代码实现163
8.2.4代码解读164
8.2.5Objective-C与JavaScript的数据类型166
8.2.6Objective-C访问HTML文件167
8.3iOS调用JavaScript168
8.3.1Objective-C调用JavaScript代码169
8.3.2Objective-C获取JavaScript中的变量170
8.3.3在Objective-C中,调用带有参数的JavaScript函数170
8.3.4在Objective-C中调用不带参数的JavaScript函数171
8.4JavaScript调用Objective-C代码172
8.4.1JavaScript调用Objective-C代码172
8.4.2JavaScript调用Objective-C函数对象173
8.5小结174
全栈开发技术
第9章Node.js入门指南176
9.1概述176
9.2Node.js生态176
9.3Node开发环境的搭建177
9.4Node.js验证177
9.5第一个Node.js工程178
9.5.1创建Node.js工程178
9.5.2运行Node.js工程179
9.5.3Node.js服务的自动重启181
9.6小结182
第10章 Express后端框架183
10.1概述183
10.2Express工程的创建183
10.3Express中的GET与POST请求184
10.3.1GET请求184
10.3.2POST请求185
10.4小结185
第11章AngularJSGoogle前端框架186
11.1AngularJS概述186
11.2AngularJS指令概述188
11.2.1AngualrJS指令:ng-app188
11.2.2AngularJS指令:ng-init189
11.2.3AngularJS指令:ng-model189
11.2.4ng-app与ng-model示例189
11.2.5AngularJS指令:ng-click191
11.3AngularJS构建单页面应用191
11.3.1单页面应用的优势191
11.3.2轻松构建单页面应用193
11.3.3单页面应用的实现194
11.4AngularJS的加载199
11.4.1AngularJS的引用199
11.4.2加载AngularJS静态资源库199
11.5AngularJS控制器200
11.5.1AngularJS控制器的创建200
11.5.2AngularJS控制器的应用200
11.5.3AngularJS的数据绑定202
11.6$scope用法204
11.7小结207
第12章MongoDB文档数据库208
12.1MongoDB概述208
12.1.1关于MongoDB208
12.1.2MongoDB的历史208
12.1.3MongoDB的优势209
12.2
|
內容試閱:
|
序
认识和凌志先生,是在2013年。
在那一年,北方工业大学计算机学院新增了新的数字媒体技术实验室,作为学生创新、创业、企业实训培养基地,为学生提供了更好的设计与开发实验环境。为了进一步激发学生的学习兴趣,促进产学研结合,同时紧跟技术发展趋势,我们开设了一门基于移动终端的互联网课程,聘请经验丰富的和凌志先生讲授iOS企业级应用开发技术。
和凌志早期担任西门子手机软件平台架构师,近十多年来,一直从事移动互联网的产品开发工作,在电商平台、移动流媒体方面,积累了丰富的行业经验。他把这些宝贵的企业经验应用在了教学实践中。早在开课之前,和凌志就已经完成了《iOS开发之美》一书,该书通俗易懂,很适合初学者快速上手。
为了给学生创造一个更好的学习条件,我们与北京高校计算机信息类专业群合作,特意录制了iOS开发的MOOC(慕课)视频课程。从Objective-C编程语言、表视图、到网络请求、数据存储,都给出了详细的实例。
与市面上已有的iOS参考书不同的是,《iOS企业级应用开发技术》一书聚焦在产品的设计、开发和运营层面。所谓企业级应用,是指开发出来的产品是可上线的、是可运营的,而不是仅仅用来演示的,而且企业级应用要考虑开发周期、研发成本、运维和运营的投入。
书中特别强调架构和设计模式的重要性,坚持倡导一个理念:在一个给定的场景下,最佳方案只有一个。比如,在讲述视图控制器之间的传值时,先后列举了五种不同的实现方案,对比不同的方案,给出相应的应用场景;在讲述Web与Native交互时,给出了多个应用实例;类似的场景还有很多。
从书名上看,《iOS企业级应用开发技术》的主题是在讲述iOS开发技术,但作者并没有仅仅停留在iOS开发本身,而是延伸到全栈(Full Stack)技术路线上。以Node.js为平台的全栈技术越来越受到互联网公司的热捧。
当下,我们正处于共享经济的时代,知识分享也日益成为一种时尚。通过尝试校企合作,《iOS企业级应用开发技术》一书历经两年,其间几易其稿,终于修成正果,不久将与读者见面。从适应技术发展的角度提升学校课程设置与社会需求的紧密结合,为学生在校期间掌握前沿技术提供一种良好手段,为毕业后走向社会打下扎实的技术基础。
马 礼
北方工业大学计算机学院院长
前 言
缘起
为何要写一本《iOS企业级应用开发技术》书?这还得从我的工作经历说起。
早在2014年,北方工业大学计算机学院就创建了数字媒体技术实验室,并为此配备了国内一流的实验设备。在过去的几年,我一直为学生们讲授iOS企业级应用开发课程,本书记录了学生实战的心路历程。
本书成稿历经两年,其间几易其稿。在这个过程中,北方工业大学计算机学院从学生到老师,都给我了很多无私的帮助。每次审视这些教学案例,都会得到一次技术上的升华。在本书出版之前,曾以本书的书稿,在北方工业大学计算机学院试用。在整个教学过程中,我为学生们在课堂上勇于质问的精神点赞。
北方工业大学计算机学院数字媒体技术实验室
读者对象
本书所面向的读者对象是有一定iOS基础的开发者。如果你是第一次接触iOS开发,建议还是翻阅下笔者的拙作《iOS开发之美》。
既然书名命名为iOS企业级应用开发技术,说明它不是一本泛泛的iOS基础的普及,相反,本书所关注的是,在企业项目开发中碰到疑难杂症时,如何开具良方,对症下药。
具体来说,这本书适宜的读者有:
(1)想学习Objective-C 2.0编程语言的初学者
过去的几年,几乎每年的WWDC开发者大会,苹果公司都会隆重地推广Swift语言,但现实情况是,在iOS企业级应用开发中,Objective-C依然是主流。
作为一门编程语言,Swift还在处于不断的更新中,从早期的1.0,发展到今天的3.0,可见其变化之大。从另一个角度来讲,说明它还存在不稳定性。
本书的所有实例,都是基于Objective-C 2.0编写的。尽管,Objective-C与Swift都是基于Xcode进行开发的,从设计模式上讲,它们有异曲同工之妙;但从编程风格上讲,二者的差异还是蛮大的。
(2)有了一定的iOS基础,想扩展iOS知识面的
就iOS技能而言,本书花了大量篇幅介绍:不同设计模式下的视图控制器之间的传值;对表视图(UITableView)一笔带过,而对集合视图(UICollectionView)则通过多个维度来演练;这是因为在笔者看来,表视图是iOS的基础控件,而在其之上,才是集合视图;还有Block(块)这个令初学者感到望而生畏的地方,网络请求、断点下载,都在本书中娓娓道来;在构建企业级应用时,混合开发模式越来越受到青睐,书中详细讲述了Native与Web的交互。
(3)已经在iOS领域久经沙场,想学习大前端、全端及全栈的
随着App多年的发展,App的优势和短板日益明显,原生技术无法解决的问题,需要前端技术(HTML5)来弥补,二者才相得益彰,所以混合开发模式越来越受欢迎。
常听到有人感叹,iOS App的用武之地没有想象得那么广阔,即使不转型,也想再扩展下自己的技术路线。从产品形态上看,iOS App也属于前端范畴,这里,笔者给出的建议是学点儿前端技术,掌握点JavaScript,向全栈进军。
如果一个App开发工程师同时具备了原生与全端的技能,由单翼变成了双翼,其技术路线的前景将越来越广阔。
如何阅读本书
作为一门iOS企业级应用开发技术,其蕴含的知识点无疑有多个方面。本书的特点是,针对同一个应用场景,用不同的方案来实现它,经过演绎推理,得出一个结论在给定的场景下,最佳方案只有一个!
为此,本书分为iOS基础篇、Web与Native(原生)混合开发篇、全栈开发技术篇。
(1)iOS基础篇
就iOS技能而言,本书先介绍了Objective-C语法,再过渡到定制化视图的创建和管理,以及App与服务器接口的定义。此外,本篇还有另外两个重要部分。
视图控制器之间的传值:总结以往的项目经验,我们发现,视图控制器之间的传值是必不可少的,而且实现的方式有多种。在同一个项目中,对同一类问题的解决会出现多个门派,如果不统一约定,后期维护将非常被动。为便于理解,这里给出了同一个场景下的4种实现方案(Delegate、Singleton、KVO、Notification),还有一种Block实现方式,放在了混合开发模式中讲解。以上实现方案,每一种方法的背后都有一种设计模式的支撑。只有掌握了设计模式,才能更好地理解和融会贯通。
集合视图的应用:我们没有讲述传统的表视图,而是聚焦在集合视图(UICollectionView)上,旨在说明,如要构建一个华丽的UI页面,就要善用集合视图。通过自定义的UICollectionViewLayout,可以轻松地实现一个瀑布流,而这种瀑布流效果是表视图所无法比拟的。为了能够掌握集合视图的应用,书中给出了大量的实例。
iOS的基础知识是没有穷尽的,只要掌握了核心的实现模式,其他的便迎刃而解,正所谓一叶知秋!
(2)Web与Native的混合开发模式
当我们面向企业级App开发时,需要用一种产品设计的思路来引导学习技术路线,而不是仅仅停留在iOS知识本身。之所以采用Web与Native混合开发模式,是因为iOS原生开发有着明显的短板,而Web(HTML5)为产品的推广带来了新的生命力。从Web技术的角度来看,总是希望有一种方法能够取代Native(原生),事实上,这种趋势越来越明显。
具体到本篇内容,分为Block的应用、网络请求、JavaScript基础、Web与Native的交互,这四部分并不是独立的,而是通过一条主线贯穿在一起的。
本质上讲,Web与Native的交互是Web与Native技术的融合。没有网络请求,Web无从谈起。而iOS的网络请求,必然用到AFNetworking;既然是网络请求,就会用到异步调用,回调和Block是异步处理机制的基础,所以才出现了Block和网络请求两章。
从iOS自身技术来讲,似乎Web加载再简单不过了,不就是调用一个UIWebView吗?其实,技术水平的差异就体现在这个缝隙地带。我们是否具备Web的基础技能呢?是否懂得一些JavaScript呢?这些知识看似与iOS无关,实际上它们是密不可分。如果iOS开发者不懂得JavaScript,那么在涉及Web与Native交互时,沟通将会很吃力,以至于影响到产品开发的进度和团队的合作效率。
从技术层面上讲,Web与Native的交互方式有多种,尽管苹果公司推出的JavaScriptCore.framework已有多年,但在项目开发中,还是有人仍在用传统的HTTP特殊字符拦截方式。虽然也能满足项目的需求,殊不知,一个过时的框架技术,会对产品后期的维护埋下了太多的坑。
本篇讲到的JavaScript基础,目的是指出,相比其他编程语言,JavaScript有什么特别之处。
Web与Native的交互,重点在讲述网页与iOS之间的相互调用。具体来说,Objective-C如何调用JavaScript,反之,JavaScript又如何调用Objective-C。而它们相互调用的桥梁是JavaScriptCore.framework,前期的Block概念在这里得到充分的应用。
(3)全栈技术
iOS开发者在经历几年的积淀之后,常常会产生一种莫名的困惑,未来的技术路线何去何从?尽管iOS SDK博大精深,但作为一个App开发者来说,没有那么多金矿可挖。历经十年的发展,iOS的第三方框架已非常成熟,如果你的工作仅仅是为了开发一个App,随着时间的推移,对技术路线的方向会愈发渴望。这个时候,有必要停留下来,仔细规划下了。
学无止境!问题是该怎么学。摆在iOS开发者面前的有两个选择:先熟悉Obje
|
|