本文遵循“署名-非商業用途-保持一致”創作公用協議
轉載請保留此句:太陽火神的美麗人生 - 本博客專注于 敏捷開發及移動和物聯設備研究: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新聞熱點
疑難解答