1、iOS iOS 开发教程开发教程ADD YOUR TITLE HEREiOS 开发环境介绍开发环境介绍第一个第一个 iOS 应用应用-“hello,woeld”Cocoa Touch框架的运行机制与开发流程框架的运行机制与开发流程iOS开发命名习惯与约定开发命名习惯与约定目录目录1234iOS用户界面元素之用户界面元素之UIView与控件与控件导航控制器导航控制器故事板故事板Storyboard与页面跳转与页面跳转提醒用户提醒用户目录目录5 56 67 78 8表视图之表视图之UITableViewiOS常用设计模式常用设计模式iOS常用设计模式常用设计模式数据存储数据存储目录目录9 9101
2、011111212触摸与手势触摸与手势目录目录1313第一章第一章 iOS开发环境介绍开发环境介绍第一章第一章 iOS开发环境介绍开发环境介绍1.1 开发前的准备 首先需要准备一台Mac,装有Mac OS X操作系统,本书定稿时,最新版Mac OS为10.12 Sierra。Mac OS X自版本10.10以及以后的版本都是免费的,没有Mac的话,在某些普通PC上可以安装所谓的“黑苹果”来开发,只是操作体验没有Mac好。1.1.11.1.1、iOSiOS介绍介绍 iOS即iPhone的操作系统。2007年iPhone诞生,当时的操作系统还不叫iOS,而是“iPhone OS”,直到2010年i
3、Pad诞生后,因为用同一个系统,因此才改名为“iOS”。iOS一般每年一次大的升级,本书写作时,iOS 10为最新正式版。iOS是iPhone、iPad、iPod Touch等苹果设备的灵魂,正是有了iOS,苹果的产品的使用体验才出类拔萃,目前国内很多安卓的App的风格,均受iOS很深的影响。第一章第一章 iOS开发环境介绍开发环境介绍Mac OS的历史非常悠久,上世纪80年代就有了,其率先实现了窗口系统,并影响了微软的Windows的设计。Mac OS自乔布斯回归苹果后,架构发生了很大的改变,使用了NextStep(乔布斯出走苹果后创办的一家软件公司的名字)的软件,现在的Cocoa库(即苹果
4、官方开发框架之名)中的众多NS开头的方法,就是NextStep的首字母缩写。尤其是后来转用intel的CPU后,将底层的内核改为UNIX的内核,与Free BSD(UNIX移植到普通PC机后的一个衍生系统,非常著名,与之齐名的还有Net BSD,Open BSD)的关系最为接近,自此Mac OS开始在程序员中非常流行,因为其既有着华丽而舒适的操作界面,更接上了UNIX的地气,有了众多的UNIX/Linux 的软件,非常受开发人员的青睐。1.1.21.1.2、Mac OS Mac OS 介绍介绍Mac OS的历史非常悠久,上世纪80年代就有了,其率先实现了窗口系统,并影响了微软的Windows的
5、设计。Mac OS自乔布斯回归苹果后,架构发生了很大的改变,使用了NextStep(乔布斯出走苹果后创办的一家软件公司的名字)的软件,现在的Cocoa库(即苹果官方开发框架之名)中的众多NS开头的方法,就是NextStep的首字母缩写。尤其是后来转用intel的CPU后,将底层的内核改为UNIX的内核,与Free BSD(UNIX移植到普通PC机后的一个衍生系统,非常著名,与之齐名的还有Net BSD,Open BSD)的关系最为接近,自此Mac OS开始在程序员中非常流行,因为其既有着华丽而舒适的操作界面,更接上了UNIX的地气,有了众多的UNIX/Linux 的软件,非常受开发人员的青睐。
6、1.1.31.1.3、开发之软硬件要求开发之软硬件要求类似微软公司鼎鼎大名的Visual Studio,苹果公司同样为开发人员准备了统一的免费的开发环境:Xcode。其功能很强大,本书所有的示例代码均在Xcode之下开发。综上所述,开发需要的软件环境为:Mac OS X Xcode,硬件则需要Mac电脑,或者可以装“黑苹果”的PC机。第一章第一章 iOS开发环境介绍开发环境介绍1.2 Xcode 集成开发环境的安装与应用1.2.11.2.1、下载与安装下载与安装 XcodeXcode 最简单的方法,打开Mac OS X 的 App Store,在其中搜索Xcode 随后可以简单的选择安装即可。
7、或者直接去苹果官网下载即可第一章第一章 iOS开发环境介绍开发环境介绍Mac OS的历史非常悠久,上世纪80年代就有了,其率先实现了窗口系统,并影响了微软的Windows的设计。Mac OS自乔布斯回归苹果后,架构发生了很大的改变,使用了NextStep(乔布斯出走苹果后创办的一家软件公司的名字)的软件,现在的Cocoa库(即苹果官方开发框架之名)中的众多NS开头的方法,就是NextStep的首字母缩写。尤其是后来转用intel的CPU后,将底层的内核改为UNIX的内核,与Free BSD(UNIX移植到普通PC机后的一个衍生系统,非常著名,与之齐名的还有Net BSD,Open BSD)的关
8、系最为接近,自此Mac OS开始在程序员中非常流行,因为其既有着华丽而舒适的操作界面,更接上了UNIX的地气,有了众多的UNIX/Linux 的软件,非常受开发人员的青睐。1.2.21.2.2、Xcode Xcode 界面布局与功能介绍界面布局与功能介绍 跟一般的IDE布局差不多,左边是项目文件树列表,中间是编辑代码区域,下面是调试信息展示,右边上面是一些选项调整和帮助信息,下面是一些额外功能及控件列表等。可以自由定义哪些界面不显示。第一章第一章 iOS开发环境介绍开发环境介绍Mac OS的历史非常悠久,上世纪80年代就有了,其率先实现了窗口系统,并影响了微软的Windows的设计。Mac O
9、S自乔布斯回归苹果后,架构发生了很大的改变,使用了NextStep(乔布斯出走苹果后创办的一家软件公司的名字)的软件,现在的Cocoa库(即苹果官方开发框架之名)中的众多NS开头的方法,就是NextStep的首字母缩写。尤其是后来转用intel的CPU后,将底层的内核改为UNIX的内核,与Free BSD(UNIX移植到普通PC机后的一个衍生系统,非常著名,与之齐名的还有Net BSD,Open BSD)的关系最为接近,自此Mac OS开始在程序员中非常流行,因为其既有着华丽而舒适的操作界面,更接上了UNIX的地气,有了众多的UNIX/Linux 的软件,非常受开发人员的青睐。1.2.31.2
10、.3、Xcode Xcode 常用快捷键常用快捷键 掌握快捷键对于快速的开发是非常有用的。首先,编辑快捷键默认是Emacs式的,比如:Ctrl+A Ctrl+A 光标移动到行首光标移动到行首Ctrl+E 光标移动到行尾Ctrl+P 光标移动到上一行Ctrl+N 光标移动到下一行Ctrl+K 从光标位置到行尾的内容都删除Ctrl+A Ctrl+K 删除当前行 复制粘贴操作则是:Command+A 全选Command+C 复制Command+V 粘贴Command+X 剪切其他快捷键:Command+点击 找到光标下的符号的定义(重要!最常用)Command+R 运行基本上掌握了这些快捷键就够了。
11、第一章第一章 iOS开发环境介绍开发环境介绍1.3 Xcode Objective C 语言和 Swift 语言1.3.11.3.1、Objective C Objective C 语言介绍语言介绍 不同于市面上其他流行的语言,Objective C语言是因为苹果公司才发展壮大的。其语言的特点与其他的主流语言相差较大,但是功能一点都不弱,用习惯了非常的方便。Objective C语言与C+都是通过给C语言加上面向对象功能发展而来,C+已经庞大到和C语言差别非常的大,而Objective C却保持了小巧的体积。Objective C更多的是借鉴了面向对象语言smallTalk的特点,强调对象之间
12、通过发送消息来通信,其独特的方括号语法处处都有,比如:object reload 表示向object 对象发送一个名为reload的消息(reload实质上是object 对象的一个方法)。1.3.11.3.1、Objective C Objective C 语言介绍语言介绍 Swift是2014年6月的WWDC大会上发布的一个新语言,由苹果公司开发出来,未来将替代Objective C。Swift像脚本语言,但又拥有编译运行的速度,拥有很多现代语言的特征,非常适合于快速开发。但从目前来看,2年多的时间,Swift发展到3.0版本,语法变化很大,而且不能向前兼容,导致之前用Swift 2.0编
13、写的代码必须大量修改才能运行(当然苹果公司在Xcode 8提供了自动转换新语法的功能,但是仍然不能完全转换,仍需人工介入),Swift语言短时间内替代不了Objective C。第一章第一章 iOS开发环境介绍开发环境介绍1.4 如何使用文档及获取帮助文件1.4.11.4.1、Xcode Xcode 帮助文档的使用帮助文档的使用 在代码中,可以按住Command键不放,此时用鼠标单击某类或者变量,可以跳到其定义处。可以通过这种方式查看Cocoa类的头文件,查看有哪些属性和方法,这对于熟悉某个类的使用方法非常的有帮助。还有一种方法,鼠标停留在某处时,Xcode右边的界面右边的帮助界面,即为鼠标此
14、时所在位置的内容(一般为类名、方法名等,下图中鼠标位置在最下面红圈处的initWithItems方法处)的帮助内容,可以点击其中蓝色的链接进行详细查看。第一章第一章 iOS开发环境介绍开发环境介绍Mac OS的历史非常悠久,上世纪80年代就有了,其率先实现了窗口系统,并影响了微软的Windows的设计。Mac OS自乔布斯回归苹果后,架构发生了很大的改变,使用了NextStep(开发App时,会不可避免的遇到难以解决的问题或错误。如果通过调试始终不能找到错误所在,一般可以把错误信息复制到搜索引擎进行搜索。一般而言,谷歌的搜索结果最,但是因为某种原因,谷歌在大陆不能使用,可以代之以微软的搜索引擎
15、必应(http:/),百度的结果相对差点。乔布斯出走苹果后创办的一家软件公司的名字)的软件,现在的Cocoa库(即苹果官方开发框架之名)中的众多NS开头的方法,就是NextStep的首字母缩写。尤其是后来转用intel的CPU后,将底层的内核改为UNIX的内核,与Free BSD(UNIX移植到普通PC机后的一个衍生系统,非常著名,与之齐名的还有Net BSD,Open BSD)的关系最为接近,自此Mac OS开始在程序员中非常流行,因为其既有着华丽而舒适的操作界面,更接上了UNIX的地气,有了众多的UNIX/Linux 的软件,非常受开发人员的青睐。1.4.21.4.2、开发中遇到问题及如何
16、寻求帮助开发中遇到问题及如何寻求帮助 开发App时,会不可避免的遇到难以解决的问题或错误。如果通过调试始终不能找到错误所在,一般可以把错误信息复制到搜索引擎进行搜索。一般而言,谷歌的搜索结果最好,但是因为某种原因,谷歌在大陆不能使用,可以代之以微软的搜索引擎必应(http:/),百度的结果相对差点。第二种 方法是上论坛提问。第三种 方法是找一些iOS开发方面的qq群。第四种 方法是上github(http:/),github可以说是现在世界上最大的开源项目中心,还有无数的第三方库可供使用。1.4.31.4.3、提问的方式提问的方式 在网上求助时,要注意提问的方式。要把环境描述清楚,把错误信息贴
17、完整,要突出重点。他人没有义务一定解答,所以要为别人考虑,尽量把信息组织的清晰易懂,他人提供帮助时也更加的方便。笔者曾经使用github的一个世界著名的开源库YYKit,使用中发现了一些bug,当即在github的该项目的主页上报告了该bug(在issue选项卡中报告),因为描述的很详细,错误定位得很清楚,该项目维护者在当天就回应并解决了该错误,提交了新版本代码。第一章第一章 iOS开发环境介绍开发环境介绍1.5 iOS程序调试、打包发布到 AppStore1.5.11.5.1、苹果开发人员计划苹果开发人员计划 首先得有一个Apple ID,然后去https:/developer.A申请开发人
18、员身份。iOS的开发,仅在模拟器上运行,是免费的,从2014年后,真机运行,也免费了,但如果需要发布到App Store上进行销售,需要申请开发人员计划,这个就不是免费的了。从2015年6月的WWDC大会之后,苹果的所有开发人员计划进行了合并,只区分个人开发者和企业开发者,其中个人开发者一年需向苹果缴纳99美元或人民币688元的费用,企业开发者则需要299美元。企业开发者可以开发私有App,不能通过App Store分发,只能通过网站的方式在企业内部分发。个人开发者则只能通过App Store进行发布。只要获取了开发者资格,就可以面向苹果所有平台(Mac、iOS、Apple watch,、sa
19、fari)进行开发和销售。在App Store上架销售的App,默认是面向全世界销售,也可以自己控制在哪些国家销售。销售所获得的收入,苹果将获得三成,开发者获得七成。第一章第一章 iOS开发环境介绍开发环境介绍Mac OS的历史非常悠久,上世纪80年代就有了,其率先实现了窗口系统,并影响了微软的Windows的设计。Mac OS自乔布斯回归苹果后,架构发生了很大的改变,使用了NextStep(开发App时,会不可避免的遇到难以解决的问题或错误。如果通过调试始终不能找到错误所在,一般可以把错误信息复制到搜索引擎进行搜索。一般而言,谷歌的搜索结果最好,但是因为某种原因,谷歌在大陆不能使用,可以代之
20、以微软的搜索引擎必应(http:/),百度的结果相对差点。乔布斯出走苹果后创办的一家软件公司的名字)的软件,现在的Cocoa库(即苹果官方开发框架之名)中的众多NS开头的方法,就是NextStep的首字母缩写。尤其是后来转用intel的CPU后,将底层的内核改为UNIX的内核,与Free BSD(UNIX移植到普通PC机后的一个衍生系统,非常著名,与之齐名的还有Net BSD,Open BSD)的关系最为接近,自此Mac OS开始在程序员中非常流行,因为其既有着华丽而舒适的操作界面,更接上了UNIX的地气,有了众多的UNIX/Linux 的软件,非常受开发人员的青睐。1.5.21.5.2、在模
21、拟器中运行程序在模拟器中运行程序 Xcode安装好后,就默认安装了iOS模拟器,可以方便的运行自己开发的App。值得一提的是,与一般人对模拟器的印象不同,iOS模拟器的运行速度非常快,有时候甚至比真机还快,一点都不卡,启动速度也很快,使用起来令人感觉愉快。选择好运行的设备,按下快捷键Command+R 即可运行。第一章第一章 iOS开发环境介绍开发环境介绍Mac OS的历史非常悠久,上世纪80年代就有了,其率先实现了窗口系统,并影响了微软的Windows的设计。Mac OS自乔布斯回归苹果后,架构发生了很大的改变,使用了NextStep(开发App时,会不可避免的遇到难以解决的问题或错误。如果
22、通过调试始终不能找到错误所在,一般可以把错误信息复制到搜索引擎进行搜索。一般而言,谷歌的搜索结果最好,但是因为某种原因,谷歌在大陆不能使用,可以代之以微软的搜索引擎必应(http:/),百度的结果相对差点。乔布斯出走苹果后创办的一家软件公司的名字)的软件,现在的Cocoa库(即苹果官方开发框架之名)中的众多NS开头的方法,就是NextStep的首字母缩写。尤其是后来转用intel的CPU后,将底层的内核改为UNIX的内核,与Free BSD(UNIX移植到普通PC机后的一个衍生系统,非常著名,与之齐名的还有Net BSD,Open BSD)的关系最为接近,自此Mac OS开始在程序员中非常流行
23、,因为其既有着华丽而舒适的操作界面,更接上了UNIX的地气,有了众多的UNIX/Linux 的软件,非常受开发人员的青睐。1.5.31.5.3、在真机中运行程序在真机中运行程序 目前要在真机中运行调试App,必须拥有开发者证书。有些功能的开发用真机方便些,比如定位,照相,方向感知等用到硬件功能的地方。有了开发者账号后,可以在Xcode之中按下Command+,(注意逗号),打开设置可以在此添加自己的开发者账号。添加成功后,将iPhone连接到电脑,Xcode将会自动检测设备,并自动的为其申请调试证书,所需做的就是等待,之后会从iPhone中拷贝调试符号(第一次调试时才会拷贝),需要几分钟的时间
24、,之后就可以在图1-4中看到自己的真机设备,此时就可以选择真机运行自己的代码了。第一章第一章 iOS开发环境介绍开发环境介绍Mac OS的历史非常悠久,上世纪80年代就有了,其率先实现了窗口系统,并影响了微软的Windows的设计。Mac OS自乔布斯回归苹果后,架构发生了很大的改变,使用了NextStep(开发App时,会不可避免的遇到难以解决的问题或错误。如果通过调试始终不能找到错误所在,一般可以把错误信息复制到搜索引擎进行搜索。一般而言,谷歌的搜索结果最好,但是因为某种原因,谷歌在大陆不能使用,可以代之以微软的搜索引擎必应(http:/),百度的结果相对差点。乔布斯出走苹果后创办的一家软
25、件公司的名字)的软件,现在的Cocoa库(即苹果官方开发框架之名)中的众多NS开头的方法,就是NextStep的首字母缩写。尤其是后来转用intel的CPU后,将底层的内核改为UNIX的内核,与Free BSD(UNIX移植到普通PC机后的一个衍生系统,非常著名,与之齐名的还有Net BSD,Open BSD)的关系最为接近,自此Mac OS开始在程序员中非常流行,因为其既有着华丽而舒适的操作界面,更接上了UNIX的地气,有了众多的UNIX/Linux 的软件,非常受开发人员的青睐。1.5.41.5.4、调试命令与技巧调试命令与技巧Xcode 中可以方便地指定程序断点。程序中断运行后,在界面下
26、面的调试小窗口中可以方便地查看变量值以及输入调试命令。在代码左侧空白处单击即可插入断点。左下角可以查看在断点处中断后的环境中的变量值,以及右下角的(lldb)处可以输入调试命令。lldb就是Xcode的调试器程序。常用的lldb命令有p(打印基础类型变量值),po(打印NSObject或其子类型的值)等。第一章第一章 iOS开发环境介绍开发环境介绍Mac OS的历史非常悠久,上世纪80年代就有了,其率先实现了窗口系统,并影响了微软的Windows的设计。Mac OS自乔布斯回归苹果后,架构发生了很大的改变,使用了NextStep(开发App时,会不可避免的遇到难以解决的问题或错误。如果通过调试
27、始终不能找到错误所在,一般可以把错误信息复制到搜索引擎进行搜索。一般而言,谷歌的搜索结果最好,但是因为某种原因,谷歌在大陆不能使用,可以代之以微软的搜索引擎必应(http:/),百度的结果相对差点。乔布斯出走苹果后创办的一家软件公司的名字)的软件,现在的Cocoa库(即苹果官方开发框架之名)中的众多NS开头的方法,就是NextStep的首字母缩写。尤其是后来转用intel的CPU后,将底层的内核改为UNIX的内核,与Free BSD(UNIX移植到普通PC机后的一个衍生系统,非常著名,与之齐名的还有Net BSD,Open BSD)的关系最为接近,自此Mac OS开始在程序员中非常流行,因为其
28、既有着华丽而舒适的操作界面,更接上了UNIX的地气,有了众多的UNIX/Linux 的软件,非常受开发人员的青睐。1.5.51.5.5、将程序打包发布至将程序打包发布至AppStoreAppStoreApp在编写完毕后,便可以发布到App Store上。先要登陆网址:http:/ 如果Organizer内容为空,需要先建立Archive,如图所示,打开Product菜单,同时运行设备要选择iOS Device或者真机,此时Product菜单下Archive项可以单击,此时可以生成Archive,在Organizer中就能看到该项目了。然后如图1-9所示,可以先Validate(验证),然后单击
29、Submit to App Store按钮(即上传至App Store),等待一段时间,就上传成功了,当然前提是在itunesconnect里建立好了这个App的信息。上传完毕后,要继续在itunesconnect中完善App的信息,包括应用的截图甚至视频,定价,联系方式等等。所有一切都准备就绪后,就可以提交审核了,审核平均需要一周的时间,而且很有可能会因为某些设计不符合苹果的规范而被拒,不过,这个过程是透明的,只要遵照了苹果的规范,一般都会通过,即使被拒绝了,也可以申诉,或者重新修改后提交,只要符合规范,都能通过。第二章第二章 第一个第一个 iOS 应用应用-“hello,world”第二章
30、第二章 iOS 应用应用-“hello,world”2.1 新建项目2.1.12.1.1、新建新建 Single View Single View 项目项目打开Xcode 8,选择“新建Xcode项目”,选择Singe View Application,同时注意左上角对应的选项卡是 iOS。然后点下一步按钮 Next,定义项目名字与组织标识第二章第二章 iOS 应用应用-“hello,world”中间的部分是项目的一部分设置,可以进行更改中间的部分是项目的一部分设置,可以进行更改:1、Version是项目的版本号,这个自己定义即可,如果提交到App Store,版本号必须至少为1.0。2、Bu
31、ild号是整数,自己定义3、Signing是应用证书签名方面的内容4、Deployment Target是最低支持到的iOS版本。5、Devices 指支持何种设备,可以只支持iPhone,也可以只支持iPad,也可以两者都支持。6、Main Interface 指定主页是用哪个storyboard。7、Device Orientation 设备旋转特性,该属性可以指定设备是否可以左转界面、右转界面或者倒转。8、其他的选项待以后章节再提。第二章第二章 iOS 应用应用-“hello,world”2.1.22.1.2、项目结构、项目结构 项目根目录下有4个文件夹,开发时一般只用到第一个与项目同名
32、的文件夹。其他三个文件夹一个是放最终产品App的,其他两个是用来编写测试代码的。Main.storyboard和LaunchScreen.storyboard分别是主界面和启动画面的可视化界面,打开即可用拖控件的方式方便的制作界面。Asset.xcasset是用来存放图片的地方,可以把App的图标和启动画面根据一定的规格集中在这里指定和存放。info.plist是一个键值对的文件,指定该App的很多属性。Supporting files文件夹下放有 main 函数,可在其中放入其他一些文件。第二章第二章 iOS 应用应用-“hello,world”2.2 AppDelegate.m 添加代码2
33、.2.12.2.1、创建、创建UIWindowUIWindow对象对象 首先必须确认在项目属性页面,把Main Interface指定为LaunchScreen.storyboad(参见前面)找到Xcode界面左侧文件列表的AppDelegate.m文件,找到第一个方法,并在其中加入代码。2.2.2.2.2 2、创建、创建ViewControllerViewController对象对象 新建项目时已经创建好了ViewController类,此时只需要往其中添加代码即可。2.2.32.2.3、例行代码、例行代码 ViewController.m文件中已经有了viewDidLoad:等几个方法。v
34、iewDidLoad:方法是视图加载完毕后自动调用(由iOS来调用,不需要自己来调用)的方法,视图生命周期的回调方法和构筑界面一般都写在此方法中。第二章第二章 iOS 应用应用-“hello,world”2.3 ViewController.m 添加代码 ViewController成为窗口的根视图控制器后,就由它来管理显示了。转到ViewController.m文件,在viewDidLoad:方法中,添加代码2.3.12.3.1、创建、创建UILabelUILabel对象对象 创建一个标签:UILabel,方法为:UILabel*label=UILabel new。2.3.22.3.2、设定
35、、设定UILabelUILabel对象的位置对象的位置 将label显示在屏幕正中,用label.center=self.view.center;即可。2.3.32.3.3、显示、显示UILabelUILabel对象对象 建立好label后,还需要将其添加到self.view中来,调用UIView对象的addSubview方法即可。第二章第二章 iOS 应用应用-“hello,world”2.4 运行程序2.4.12.4.1、在模拟器上运行程序、在模拟器上运行程序 在Xcode 左上角可以看到模拟器下拉列表,选择一个模拟器,按下Xcode左上角的黑色三角形按钮就可以运行了,或者直接用快捷键Cm
36、d+R,即可看到运行结果2.4.22.4.2、模拟器操作介绍、模拟器操作介绍 iOS模拟器功能非常强大,性能也很好,通常开发项目时用模拟器更加的方便快捷,只有在用到摄像、定位之类的功能时,用真机调试才更方便。按下Cmd+S即可将模拟器的显示截图为png图片并保存在桌面上。第三章第三章 Cocoa Touch框架的运行机制与开发流程框架的运行机制与开发流程第三章第三章 Cocoa Touch框架的运行机制与开发流程框架的运行机制与开发流程3.1 理解 UI 程序运行机制3.1.13.1.1、程序不是顺序运行、程序不是顺序运行 这里有个概念叫异步执行。与之相对的是同步执行。同步执行就是一步步按部就
37、班的执行,当前任务位未完成,则当前线程陷入阻塞状态,直到任务完成才运行下一个任务。而异步执行则灵活的多,指定一个任务运行后,不管任务有没完成,马上就返回执行下一个任务。之前的任务完成后,框架会自动调用写好的回调函数来处理善后。3.1.23.1.2、用户操作,硬件中断与消息处理、用户操作,硬件中断与消息处理 用户操作时,硬件会产生一个中断,此时操作系统将陷入中断处理状态,此时会调用应用程序注册好的回调响应方法来响应该中断。App通过向操作系统注册回调方法,就能轻松实现某输入事件发生后自己定义的回调方法按预期被调用。整个UI程序开发,就是在这样一种机制下编写事件响应方法而已,也就时所谓的消息处理。
38、第三章第三章 Cocoa Touch框架的运行机制与开发流程框架的运行机制与开发流程3.2 iOS 的消息处理机制 iOS主要通过视图控制器来接手消息处理。视图控制器UIViewController管理着视图的生命周期,事件如下:1、视图加载完毕2、视图将显示3、视图已显示4、视图将消失5、视图已消失 每一个事件都对应一个事件响应方法(框架已提供好),开发要做的事就是覆盖默认的响应方法。视图本身也可以响应事件处理,但是为了代码结构清晰容易维护,一般不这样做。第三章第三章 Cocoa Touch框架的运行机制与开发流程框架的运行机制与开发流程3.2.13.2.1、协议与代理、协议与代理 协议与代
39、理是Objective C语言的概念,与其他的语言的名词差别很大。协议可以看作是java等语言中的接口,或者抽象类,即只有方法定义,却不实现方法。代理是实现了协议的对象,可以看作是java等语言中实现了某接口或抽象类的对象。3.2.23.2.2、targettarget与与selectorselector 事件发生后,到底由哪一个对象来处理事件?target即用来指定事件由哪个对象来处理(target本意是靶子,意思是发生事件的对象,会将事件和自己像子弹一样发送给这个“靶子”,由这个靶子来决定怎么处理)。问题是对象有很多方法,具体由哪个方法来处理呢?selector即指定某方法来具体执行响应事
40、件。一般的,UIControl的子类都有对象方法 addTarget:action:forControlEvent:来方便的为某事件指定由某对象的某方法来处理。3.2.23.2.2、targettarget与与selectorselector 有一些事件,不是由硬件中断产生。比如键盘收起事件,输入框文字改变事件等等,这些事件一般通过Cocoa的通知中心机制来广播。可以通过NSNotification类获得默认的通知中心,从中注册感兴趣的消息以及指定响应的对象及方法。当某对象不再需要响应某消息时,必须要从通知中心注销,注销后通知中心将不会再发送给该对象该消息。第三章第三章 Cocoa Touch
41、框架的运行机制与开发流程框架的运行机制与开发流程3.3 程序开发流程简介 Cocoa Touch框架已经搭建好外围脚手架,开发所要做的不过是编写界面以及编写事件响应方法而已。事实上,所有的UI开发平台(包括windows,android)都是这样的套路。3.3.13.3.1、创建窗口和控件、创建窗口和控件 苹果提供了UIViewController类,该类定义了一个页面,做好了所有的基础框架工作,开发所要做的,只需编写UIViewController的子类来实现某个界面及其事件响应方法,在其中的viewDidLoad方法中创建视图、控件,以及指定响应方法,除了UIViewController类
42、,还有一些特殊用途的基础控制器类(均为UIViewController子类),比如UITableViewController,UIActivityViewController等等(也要通过编写子类来实现具体的事件响应)。3.3.23.3.2、视图与控件事件绑定、视图与控件事件绑定 视图的基础类为UIView。该类没有事件绑定,但是可以定义手势对象加在其上,令其能够响应手势操作。一般的手势有捏拉缩放、轻拍、连拍、滑动、轻扫等。控件是能够操作的视图类,比如开关控件,按钮控件等等,其基类为UIControl(该类也是UIViewd的子类),该类将低级的触摸事件自动识别为若干高级事件(比如按下,松开,
43、拖动等),省去了自己判断是何种事件的处理,同时提供了一个方法 addTarget:action:forControlEvents:,可方便的为某个事件添加相应的响应方法。第三章第三章 Cocoa Touch框架的运行机制与开发流程框架的运行机制与开发流程3.3.33.3.3、编写事件响应方法、编写事件响应方法 事件响应方法一般性的都带有一个参数,即发生事件的视图或控件本身。可以方便的引用到发生事件的视图或控件本身,因此响应方法编写起来非常方便。第三章第三章 Cocoa Touch框架的运行机制与开发流程框架的运行机制与开发流程3.4 MVC 方法3.4.13.4.1、MVCMVC概述概述 MV
44、C是历史悠久的一个项目开发架构,MVC三个字母分别代表着模型、视图和控制器。控制器控制视图的显示,将模型中的数据显示到视图之上。通过这种架构,项目之间的关系比较的明晰,容易维护,也容易扩展。非常的流行。Cocoa即为这种架构。3.4.23.4.2、模型、模型 模型即数据模型,通常可以是各种数据实体类。通过设计合适数据结构,方便业务逻辑的表达。模型类只专注于如何组织数据。如果应用带有数据管理,使用了CoreData的话,CoreData能自动生成模型类(实体类),具体可参见第12章12.3节,如果是通过json与服务器通信的话,需要自己根据json数据制作实体类。3.4.33.4.3、视图、视图
45、 视图即如何显示。对于显示何种内容由控制器来控制,本身只关注于如何布局,以及各种显示效果。所有的视图类都继承于UIView。控件类都继承于UIControl,UIControl也是UIView的子类。第三章第三章 Cocoa Touch框架的运行机制与开发流程框架的运行机制与开发流程3.4.43.4.4、控制器、控制器 控制器是MVC中最重要的一环,负责控制模型以及视图的显示。业务逻辑都体现在控制器中。所有控制器都是UIViewController的子类。3.4.53.4.5、再论、再论MVCMVC的意义的意义 MVC对现代软件开发有着深远的影响。清晰的软件架构设计,有利于开发,也有利于维护。
46、有时候需求不明晰,或者客户其实也不知道自己到底要什么样的东西,或者需求变更的情况下,通常对项目的影响非常大,甚至有很大一部分的代码需要推倒重写。而如果架构设计的好的情况下,受影响的代码将能减少到最低。MVC无疑是设计上的佼佼者。第四章第四章 iOS开发命名习惯与约定开发命名习惯与约定第四章第四章 iOS开发命名习惯与约定开发命名习惯与约定4.1 良好的编程习惯 iOS的类库有着严格的开发命名约定。好的命名对于开发和维护有着非常大的影响。不恰当的命名不仅容易引起困惑,也容易引发错误。好的命名习惯,既是优秀程序员的要求,更是程序员应该养成的习惯。4.1.14.1.1、命名方式与一致性、命名方式与一
47、致性 一般常用的命名方式,是用英语单词的叠加。苹果采用的是驼峰表示法,变量或方法命名的第一个字母小写,而后每一个单词的首字母大写,比如textLabel,detailLabel。类和枚举的命名,要加上大写前缀,而后的每个单词都首字母大写。比如:UIView,UIScrollView,UITableView,UITableViewStyleGrouped。之所以要大写前缀,是因为Objective C语言没有提供命名空间,因此大型项目容易发生命名冲突的情况,所以前缀冠以某大写字母,弥补了这个不足。如果一旦确定好命名方式,就要保持一致性。4.1.24.1.2、换行与缩进、换行与缩进 应该根据所在公
48、司与项目的要求来确定几个空格缩进,并严格的遵循。4.1.34.1.3、编程风格有什么用、编程风格有什么用 编程风格好的代码,因其规律性,使得很容易阅读代码,同时在排错时很容易定位到错误地方。第四章第四章 iOS开发命名习惯与约定开发命名习惯与约定4.2 iOS的命名习惯4.2.14.2.1、骆驼表示法、骆驼表示法 iOS的命名习惯是骆驼表示法,也叫驼峰表示法。就像骆驼的驼峰一样,隔一段距离有一个驼峰,在命名上就是名字中每个单词的首字母大写。比如UITableView。iOS的各个头文件中,有大量的代码可以参考,以及github上有大量的iOS开源项目的代码可供参考,基本都严格遵循了骆驼表示法,
49、是学习的好范本。必须要指出的是,C+代码有的是不用骆驼表示法的,其标准库风格一般是通过下划线连接各个单词,有的项目会要掺杂一些C+甚至C语言的代码,要注意这个代码风格的差别。第五章第五章 iOS用户界面元素之用户界面元素之UIView与控件与控件第五章第五章 iOS用户界面元素之用户界面元素之UIView与控件与控件5.1 UIView 概述 UIView是所有视图类的根类。视图的大小,用点来表示。iPhone 5S 及以下机型,屏幕宽320点,iPhone 4S及一下的机型,高480点,iPhone 5与iPhone 5S则高568点。iPhone 6与iPhone 6P的宽度和高度则更大一
50、些。点的概念与像素不同。最初的iPhone不是视网膜屏幕,1个像素表示的大小与之后的视网膜屏幕表示的大小差别很大,所以引入了点的概念:在非视网膜屏幕下,1点就是1个像素,而在视网膜屏幕下,1点可以代表4个像素。通过点的概念,可以比较精确的控制视图的大小。苹果的设计规范,一般工具栏或导航拦等的高度为44点。44点也是人手触摸按钮时感到合适的最小高度。视图之间的间隔,如果不指定的话,一般默认值为8点。第五章第五章 iOS用户界面元素之用户界面元素之UIView与控件与控件5.1.15.1.1、UIViewUIView家族家族 UIView是所有视图类的根类,由其衍生出来众多的子类以及控件类。值得注