中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

ios 8應用構建細節挖掘之應用啟動流程
來源:易賢網 閱讀:1424 次 日期:2015-01-26 15:35:21
溫馨提示:易賢網小編為您整理了“ios 8應用構建細節挖掘之應用啟動流程”,方便廣大網友查閱!

本文遵循“署名-非商業用途-保持一致”創作公用協議

轉載請保留此句:太陽火神的美麗人生 - 本博客專注于 敏捷開發及移動和物聯設備研究: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 文件如下:

#import <uikit uikit.h=>

#import appdelegate.h

int main(int argc, char * argv[])

{

@autoreleasepool {

return uiapplicationmain(argc, argv, nil, nsstringfromclass([appdelegate class]));

}

}

</uikit>

main 函數,和 c 語言中的一模一樣,帶兩個參數,argc 是參數個數,argv 是參數的字符串數組,或者叫列表也行。

上面兩行中 #import 是objective-c 中新引入的和 #include 宏指令一樣的功能,引入其它頭文件。

之所以要引入這個新的指令來包含頭文件,是因為 #include 會存在重復引入的問題,即一個頭文件被引入多次,那么就可能定義了多個對象或變量,那是會出錯的。

所以,在 c 中,會使用宏指令來判斷一個頭文件中的預定義宏名是否存在,不存在則在宏條件判斷中使用 #include 引入頭文件,否則不走這一宏分支,頭文件就不會被引入。

availability.h 頭文件的精簡結構如下,雖然在 -prefix.pch 文件中是使用 #import 引入的該頭文件,但也不可掉以輕心,因為該文件還有可能在 c 代碼中使用 #include 引入,所以仍然加了 c 樣式的唯一引入宏結構:

#ifndef __availability__

#define __availability__

#include

#endif /* __availability__ */

</availabilityinternal.h>

這么麻煩地對頭文件進行處理,真是浪費時間,那么 #import 應運而生,不用擔心頭文件重復引入的問題。不過,別高興得太早,循環引用的問題,還是沒辦法解決的,這個就要用到另一個 @class 來聲明類名的存在性以便在聲明文件中定義對象引用,而實際頭文件引入放在實現文件中。對于復雜些的邏輯,還是得靠你的整體把握能力來避勉循環引用:即 a 引入 b,b 引入 a 。

ios 應用程序中最常,也算是基本約定俗成的,要引入兩個框架:uikit 和 foundation。

而在 main.m 文件中,注釋掉 uikit 的引入,程序也是會正常運行的,因為并未用到 uikit,只是程序模板默認加上的,可能是其它類型應用會用到吧,也許!

自動釋放池,這里不作深入介紹,因為我們當前創建的應用,都默認是支持 arc (自動引用計數 automatic reference counting)的,所以使用這種配套的自動釋放池方法。

@autoreleasepool {

1

}

早先的方式,已經過時,這種新的方式,也支持 mrc(手動引用計數 manual reference counting)源文件的引入,只不過需要對源文件編譯部分進行相應參數設置,需加上

1

-fno-objc-arc

相反,在早期的 mrc 項目中,所使用的方式已經過時,當下的 xcode 不會給你創建這樣的模板代碼,而且在用以 arc 為主的工程時,那個也不會得到預編譯的很好處理。如果確實需要的話,在 mrc 項目中引入 arc 的源文件,在該 arc 源文件的編譯選項中,輸入

1

-fobjc-arc

arc 無非就是預編譯時,由編譯器根據需要替你把需要加上的 mrc 中的相應內存管理的代碼加上去,而非真正的動態內存管理,即垃圾回收,所以它的效率和內存占用率要優質得多。

接下來,

1

uiapplicationmain

將成為重點內容,它就相當于 mfc 中 winmain 函數。

對于有窗體的應用,它要呈現界面元素,并響應用戶的操作,比如鼠標、鍵盤、觸屏等用戶操作事件,以及移動設備的各類傳感器事件等等。

這就要求帶窗體的應用,要能夠循環查詢到這樣的事件,或許事件直接觸發可能會更快捷和節省資源,但那樣的后果是耦合性太強了。

所以,輪詢和事件觸發相結合,適當的分配,才能達到預期的效果。事件由系統分發給每個或者移動設備的當前應用,這需要由事件緩存池來完成,而每個應用輪詢期自身得到的事件,或由外部置入事件池,或由內部發生,得到這個事件后,再進行觸發,而將需要直接調用的回調函數進行緩存,注意啦,在應用內,變成了緩存事件回調函數,而非事件本身,事件本身相當于直接傳遞。由此就很好地解決了輪詢帶來的低效率和高資源占用與直接回調的耦合緊密等等弱點。

uiapplicationmain 函數有四個參數:

1

uiapplicationmain(argc, argv, nil, nsstringfromclass([appdelegate class]));

第一個和第二個參數是 c 程序體的傳入參數,直接傳入,不做任何加工;

第三個參數是要創建的 ios 應用實例的類,該類是 uiapplication 或其子類,每個應用僅此一個;

第四個參數是要創建的應用代理類,該類的功能其實是可以在應用類中完成的,不過這種代理模式能很好地把這部分功能從應用類中分離出來,這也是蘋果采用代理模式處理各種事件響應的高明之處。開發人員只要按代理方法的要求進行處理就可以了,對于統一規范預期工作任務很有幫助,不至于由于開發人員的疏忽,而把程序結構搞得混亂。

下面就針對 uiapplicationmain 未指定代理類和指定代理類兩種情況對進一步的應用啟動過程作以簡要敘述。

還有就是主窗體的來源,應用類實例會從 xxx-info.plist 中讀取相關配置信息。

其中 main nib file base name 決定了從 nib 文件還是 storyboard 中獲取應用的窗口信息,

1、如果是 nib,那么主窗口也從該文件中讀取,接下來,就可以從應用代理中,給主窗口設置根視圖控制器;

如果 uiapplicationmain 的第四個參數應用代理類為 nil 的話,應用不知如何找到應用代理類進行實例化,它就會在這個主 nib 文件中尋找,尋找的規則是:

(這句話是錯的,不是第四參為空,才從 nib 中取應用代理,而是指定了主 nib ,就會默認在這里找,如果找不到,再使用第四參)

a、主 nib 文件中的 file's owner 是當前應用類,所以設成 uiapplication 或你指定的子類,然后在主 nib 中添加一個對象,設定它為應用代理類,

并從 file's owner 拉線到剛加入的設成應用代理類的對象上,這時會彈出選項,選擇 outlets 下的 delegate,這樣就把應用代理類關聯到了應用類的代理引用上了。

以下 uiapplication.h 中 uiapplication 的聲明可以讓你明白應用類與應用代理類的關系是組合的方式,至于面向對象復用機制的兩種方式繼承與組合,可以參見 繼承和組合:

ns_class_available_ios(2_0) @interface uiapplication : uiresponder <uiactionsheetdelegate>

{

@package

id <uiapplicationdelegate> _delegate;

</uiapplicationdelegate></uiactionsheetdelegate>

b、如果仍找不到的話,也即 file's owner 所對應的應用類的 delegate 未指定應用代理類,就會償試使用 uiapplicationmain 的第四個參數應用代理類。

c、如果 主 nib 中 file's owner 沒給應用的 delegate 指定代理類,而且 uiapplicationmain 的第四個參數也為 nil,這時應用一樣會啟動, nib 中的主窗口一樣會顯示,但沒有代理類,無法接收到應用類的應用生命周期的相關事件。

2、如果是 storyboard,主窗口就由應用自動創建,并將 storyboard 的第一個視圖控制器作為主窗口的根視圖控制器。

3、如果為空,則應用就不管主窗口的事情了,由開發者自已來搞定,此時運行,會在模擬器中看到黑屏應用,即沒有窗口,當然了,狀態欄作為窗口的一部分。

那么,主窗口從哪兒創建呢?這就涉及到應用代理類了,因為窗口是可以動態創建并指定的,而且窗口是可以有多個的,但主窗口只有一個,并且只有一個處于可見狀態。

寫了一下午,邊測試,邊確認,邊構思、組織語言與代碼,尚缺一些實際測試過程的截圖確認,這個后續再補上。

好像是缺點什么,當時想到了,專注于某一個話題后再回到上面來俯視,發現忘記了......

回頭再說,想起來,隨時補充。

當然了,這其中還包括,查到的與我這里話題相當的十幾二十篇非常不錯的參考資料,先建個所有chrome 的標簽組吧,今天真的有點累了,該天再續。

更多信息請查看IT技術專欄

更多信息請查看網絡編程
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
亚洲欧洲三级| 久久久久久伊人| 欧美精品一区二区蜜臀亚洲| 欧美有码视频| 亚洲一区制服诱惑| 中文在线一区| 国产精品99久久久久久久女警| 亚洲精品一区二区在线观看| 亚洲激情网站| 最新亚洲一区| 亚洲美女电影在线| 亚洲精选一区二区| 亚洲理论在线观看| 亚洲日本国产| 99这里有精品| 亚洲一区二区精品视频| 亚洲一二三级电影| 亚洲欧美日韩精品综合在线观看| 亚洲在线视频| 欧美一区二区三区在| 久久大逼视频| 久久青草久久| 欧美裸体一区二区三区| 欧美日韩亚洲天堂| 国产精品入口麻豆原神| 国产一区二区剧情av在线| 国产专区欧美精品| 亚洲大片在线观看| 99pao成人国产永久免费视频| 日韩午夜av电影| 亚洲自拍偷拍网址| 欧美一区二区三区视频在线| 久久久久久电影| 欧美1区视频| 欧美色网在线| 国产区在线观看成人精品| 国产一区二区三区无遮挡| 亚洲福利电影| 亚洲一区高清| 榴莲视频成人在线观看| 欧美日韩精品一区视频| 国产精品亚洲综合天堂夜夜| 经典三级久久| 夜夜精品视频| 久久久久久久一区二区三区| 欧美国产视频日韩| 国产精品揄拍500视频| 在线观看视频一区| 亚洲私人影院在线观看| 久久一区免费| 国产精品免费aⅴ片在线观看| 一区二区三区自拍| 亚洲欧美成人一区二区在线电影| 嫩模写真一区二区三区三州| 国产精品理论片| 亚洲国产精品久久久久秋霞不卡| 中文av一区特黄| 美女爽到呻吟久久久久| 国产精品视频一区二区三区| 亚洲精品国产精品国产自| 欧美亚洲一区二区在线| 欧美日韩亚洲综合一区| 亚洲国产成人av| 亚洲欧美日韩在线播放| 久久婷婷影院| 国产日本欧美一区二区三区在线| 亚洲精品在线免费| 久久综合狠狠综合久久综青草 | 亚洲一区二区免费视频| 美女国内精品自产拍在线播放| 欧美日韩一区国产| 精品av久久久久电影| 亚洲欧美另类在线观看| 欧美日韩亚洲视频一区| 亚洲国产婷婷香蕉久久久久久99| 性xx色xx综合久久久xx| 欧美日韩综合一区| 亚洲精品国产精品乱码不99按摩| 久久精品亚洲乱码伦伦中文| 国产精品你懂得| 99精品视频免费| 欧美激情一区二区三区不卡| 伊人天天综合| 久久手机免费观看| 国产亚洲综合精品| 性欧美大战久久久久久久免费观看 | 亚洲一区二区免费在线| 欧美日韩精品是欧美日韩精品| 亚洲国产cao| 久久综合网色—综合色88| 国产一区二区在线观看免费播放| 午夜精品一区二区三区在线| 国产精品日韩欧美一区二区| 亚洲欧美日韩在线综合| 国产精品青草综合久久久久99| 亚洲在线视频观看| 国产老肥熟一区二区三区| 亚洲一区二区在线免费观看视频| 欧美日韩亚洲一区三区| 亚洲免费影视第一页| 国产欧美日韩伦理| 久久精品亚洲精品| 在线观看精品| 欧美日韩国产丝袜另类| 亚洲午夜影视影院在线观看| 国产美女搞久久| 久久久久久网| 亚洲国产精品一区在线观看不卡| 欧美激情精品久久久久久久变态 | 欧美成人日韩| 日韩一级二级三级| 欧美色综合网| 欧美一区二区三区四区视频 | 久久久久久久高潮| 在线看欧美日韩| 欧美久久九九| 亚洲女优在线| 在线日韩中文| 国产精品v欧美精品v日本精品动漫 | 亚洲黄页一区| 国产精品电影观看| 久久激情婷婷| 亚洲国内精品| 欧美日韩在线视频首页| 久久99伊人| 一道本一区二区| 国内久久视频| 欧美色区777第一页| 久久久精品性| 一区二区三区日韩精品视频| 国产日韩久久| 欧美久久一区| 久久女同互慰一区二区三区| 一个人看的www久久| 国内外成人免费视频| 欧美精品123区| 欧美一区二区三区男人的天堂| 91久久国产综合久久| 国产乱码精品1区2区3区| 免费中文字幕日韩欧美| 香蕉久久一区二区不卡无毒影院| 亚洲人成网站在线播| 国产亚洲亚洲| 国产精品久久波多野结衣| 欧美~级网站不卡| 久久狠狠久久综合桃花| 亚洲一级一区| 日韩亚洲视频| 亚洲国产高潮在线观看| 国产精品亚洲综合一区在线观看| 欧美极品在线播放| 久久亚洲精品视频| 午夜一区不卡| 在线亚洲免费| 一本色道久久| 亚洲美女毛片| 亚洲精品一区二区三| 亚洲国产成人高清精品| 国产一区二区三区直播精品电影 | 欧美日韩视频在线一区二区 | 久久精品国产成人| 亚洲一区二区在线看| 99精品欧美一区二区三区综合在线 | 欧美日韩综合在线免费观看| 久久天天躁狠狠躁夜夜av| 欧美一区二区三区视频免费| 亚洲一区二区在线免费观看视频| 亚洲美女av电影| 亚洲精品免费一二三区| 最新亚洲视频| 亚洲黑丝在线| 亚洲黄一区二区三区| 在线观看久久av| 在线不卡a资源高清| 黄色日韩网站视频| 精品999网站| 亚洲成色www8888| 亚洲级视频在线观看免费1级| 亚洲高清免费在线| 亚洲国产天堂久久综合网| 亚洲国内精品| 日韩一级片网址| 中文欧美字幕免费| 亚洲一区二区在线播放| 午夜精品福利电影| 欧美中文字幕久久| 久久婷婷亚洲| 欧美美女操人视频| 欧美特黄视频| 国产日本欧洲亚洲| 影音先锋另类| 日韩一二在线观看| 亚洲无限av看| 欧美一级专区免费大片| 久久精品在线免费观看| 久久在线91| 欧美日韩www| 国产精品综合不卡av| 国内久久视频| 亚洲免费观看高清完整版在线观看熊|