本文遵循“署名-非商业用途-保持一致”创作公用协议
转载请保留此句:太阳火神的美丽人生 - 本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作。
24K 标题党!
不过内容绝对够细节而全面,仅针对启动流程这一小块块哟!
iOS 应用启动流程,这个话题早在09年就非常熟悉,然而时隔多年,不知是否还熟悉,尤其 StoryBoard 的引入,那么下面就一起来看看吧,如果确实说明白了,给个评论,或哪里有不足,需要完善,也给个指点。
由于 Objective-C 是对 C 的扩展,那么 main 函数理所当然地继承了程序入口的位置,而不像安卓,虽然它的程序入口点可能也是 main ,但那是掩埋在系统框架之内根源处的,也或许叫别的名字,想了解可参考Android系统启动过程。
在 XCode 5.1.1 (2014-07-20 周日,此时 iOS 8 已经发布,但还未正式上架应用,beta 3 据说已经可以供开发者偿鲜)中新建一个单视图应用 (Single View Application)。
XCode 工程中总有很多罗里巴山的文件,不过这也正是它先进之处,控制权集中,撒出多个点,来供开发者配置以改变应用的运行效果,或许用傻瓜式的应用架构方式更贴切一些,不过,像 iOS 这样不开源的架构,是否长此以往,我们的后代人是否会真的变成傻瓜,对架构内部的程序艺术完全不了解,丧失了这种架构能力了呢?!
切入主题,程序入口 main.m 文件如下:
1 2 3 4 5 6 7 8 9 10main 函数,和 C 语言中的一模一样,带两个参数,argc 是参数个数,argv 是参数的字符串数组,或者叫列表也行。
上面两行中 #import 是Objective-C 中新引入的和 #include 宏指令一样的功能,引入其它头文件。
之所以要引入这个新的指令来包含头文件,是因为 #include 会存在重复引入的问题,即一个头文件被引入多次,那么就可能定义了多个对象或变量,那是会出错的。
所以,在 C 中,会使用宏指令来判断一个头文件中的预定义宏名是否存在,不存在则在宏条件判断中使用 #include 引入头文件,否则不走这一宏分支,头文件就不会被引入。
Availability.h 头文件的精简结构如下,虽然在 -Prefix.pch 文件中是使用 #import 引入的该头文件,但也不可掉以轻心,因为该文件还有可能在 C 代码中使用 #include 引入,所以仍然加了 C 样式的唯一引入宏结构:
1 2 3 4 5 6 7 #ifndef __AVAILABIL新闻热点
疑难解答