iOS程序啟動(dòng)原理

Info.plist的常用屬性

常見屬性

本地化相關(guān)

Localiztion native development region(CFBundleDevelopmentRegion)

程序安裝后顯示的名稱

限制在10-12個(gè)字符贱案,如果超出,將被顯示縮寫名稱

Bundle display name(CFBundleDisplayName)

app圖標(biāo)名稱

一般為Icon.png

Icon file(CFBundleIconFile)

應(yīng)用程序的版本號(hào)

每次往App Store上發(fā)布一個(gè)新版本時(shí)涩馆,需要增加這個(gè)版本號(hào)

Bundle version(CFBundleVersion)Main storyboard file base name(NSMainStoryboardFile)-主storyboard文件的名稱

項(xiàng)目的唯一標(biāo)識(shí)

項(xiàng)目的唯一標(biāo)識(shí)芍殖,部署到真機(jī)時(shí)用到

Bundle identifier(CFBundleIdentifier)

pch文件

Xcode5項(xiàng)目的Supporting files文件夾下面有個(gè)“工程名-Prefix.pch”文件,也是一個(gè)頭文件

pch頭文件的內(nèi)容能被項(xiàng)目中的其他所有源文件共享和訪問(wèn)

一般在pch文件中定義一些全局的宏

在pch文件中添加下列預(yù)處理指令像寒,然后在項(xiàng)目中使用Log(…)來(lái)輸出日志信息劝赔,就可以在發(fā)布應(yīng)用的時(shí)候誓焦,一次性將NSLog語(yǔ)句移除(在調(diào)試模式下,才有定義DEBUG)

#ifdef DEBUG
#define Log(...) NSLog(__VA_ARGS__)
#else
#define Log(...) /* */
#endif

UIApplication

UIApplication對(duì)象是應(yīng)用程序的象征

每一個(gè)應(yīng)用都有自己的UIApplication對(duì)象着帽,而且是單例的

通過(guò)[UIApplication sharedApplication]可以獲得這個(gè)單例對(duì)象

一個(gè)iOS程序啟動(dòng)后創(chuàng)建的第一個(gè)對(duì)象就是UIApplication對(duì)象

利用UIApplication對(duì)象杂伟,能進(jìn)行一些應(yīng)用級(jí)別的操作

UIApplication的常用屬性

設(shè)置應(yīng)用程序圖標(biāo)右上角的紅色提醒數(shù)字

@property(nonatomic) NSInteger applicationIconBadgeNumber;

設(shè)置聯(lián)網(wǎng)指示器的可見性

@property(nonatomic,getter=isNetworkActivityIndicatorVisible) BOOL networkActivityIndicatorVisible;

iOS7中的狀態(tài)欄

從iOS7開始,系統(tǒng)提供了2種管理狀態(tài)欄的方式

通過(guò)UIViewController管理(每一個(gè)UIViewController都可以擁有自己不同的狀態(tài)欄)

通過(guò)UIApplication管理(一個(gè)應(yīng)用程序的狀態(tài)欄都由它統(tǒng)一管理)

在iOS7中仍翰,默認(rèn)情況下赫粥,狀態(tài)欄都是由UIViewController管理的,UIViewController實(shí)現(xiàn)下列方法就可以輕松管理狀態(tài)欄的可見性和樣式

狀態(tài)欄的樣式

- (UIStatusBarStyle)preferredStatusBarStyle; 

狀態(tài)欄的可見性

- (BOOL)prefersStatusBarHidden; 

如果想利用UIApplication來(lái)管理狀態(tài)欄予借,首先得修改Info.plist的設(shè)置

openURL

UIApplication有個(gè)功能十分強(qiáng)大的openURL:方法

- (BOOL)openURL:(NSURL*)url;

openURL:方法的部分功能有

打電話

UIApplication *app = [UIApplication sharedApplication];
[app openURL:[NSURL URLWithString:@"tel://10086"]];

發(fā)短信

[app openURL:[NSURL URLWithString:@"sms://10086"]];

發(fā)郵件

[app openURL:[NSURL URLWithString:@"mailto://cbgtyw@gmail.com"]];

打開一個(gè)網(wǎng)頁(yè)資源

[app openURL:[NSURL URLWithString:@"http://www.terwer.com"]];

打開其他app程序

UIApplication和delegate

所有的移動(dòng)操作系統(tǒng)都有個(gè)致命的缺點(diǎn):app很容易受到打擾越平。比如一個(gè)來(lái)電或者鎖屏?xí)?dǎo)致app進(jìn)入后臺(tái)甚至被終止

還有很多其它類似的情況會(huì)導(dǎo)致app受到干擾频蛔,在app受到干擾時(shí),會(huì)產(chǎn)生一些系統(tǒng)事件喧笔,這時(shí)UIApplication會(huì)通知它的delegate對(duì)象帽驯,讓delegate代理來(lái)處理這些系統(tǒng)事件

delegate可處理的事件包括:
應(yīng)用程序的生命周期事件(如程序啟動(dòng)和關(guān)閉)
系統(tǒng)事件(如來(lái)電)
內(nèi)存警告
… …

UIApplicationDelegate協(xié)議

// app接收到內(nèi)存警告時(shí)調(diào)用    
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application;

// app進(jìn)入后臺(tái)時(shí)調(diào)用(比如按了home鍵)   
- (void)applicationDidEnterBackground:(UIApplication *)application;

// app啟動(dòng)完畢時(shí)調(diào)用    
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;

iOS程序的啟動(dòng)過(guò)程

UIApplicationMain

main函數(shù)中執(zhí)行了一個(gè)UIApplicationMain這個(gè)函數(shù)

int UIApplicationMain(int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName);

argc、argv:直接傳遞給UIApplicationMain進(jìn)行相關(guān)處理即可

principalClassName:指定應(yīng)用程序類名(app的象征)书闸,該類必須是UIApplication(或子類)。如果為nil,則用UIApplication類作為默認(rèn)值

delegateClassName:指定應(yīng)用程序的代理類利凑,該類必須遵守UIApplicationDelegate協(xié)議

UIApplicationMain函數(shù)會(huì)根據(jù)principalClassName創(chuàng)建UIApplication對(duì)象浆劲,根據(jù)delegateClassName創(chuàng)建一個(gè)delegate對(duì)象,并將該delegate對(duì)象賦值給UIApplication對(duì)象中的delegate屬性

接著會(huì)建立應(yīng)用程序的Main Runloop(事件循環(huán))哀澈,進(jìn)行事件的處理(首先會(huì)在程序完畢后調(diào)用delegate對(duì)象的application:didFinishLaunchingWithOptions:方法)

程序正常退出時(shí)UIApplicationMain函數(shù)才返回

UIWindow

深入U(xiǎn)IWindow

UIWindow是一種特殊的UIView牌借,通常在一個(gè)app中只會(huì)有一個(gè)UIWindow

iOS程序啟動(dòng)完畢后,創(chuàng)建的第一個(gè)視圖控件就是UIWindow割按,接著創(chuàng)建控制器的view膨报,最后將控制器的view添加到UIWindow上,于是控制器的view就顯示在屏幕上了

一個(gè)iOS程序之所以能顯示到屏幕上适荣,完全是因?yàn)樗蠻IWindow

也就說(shuō)现柠,沒(méi)有UIWindow,就看不見任何UI界面

添加UIView到UIWindow中兩種常見方式:

- (void)addSubview:(UIView *)view;         

直接將view添加到UIWindow中弛矛,但并不會(huì)理會(huì)view對(duì)應(yīng)的UIViewController

@property(nonatomic,retain) UIViewController *rootViewController;        

自動(dòng)將rootViewController的view添加到UIWindow中够吩,負(fù)責(zé)管理rootViewController的生命周期

常用方法

- (void)makeKeyWindow;     
讓當(dāng)前UIWindow變成keyWindow(主窗口)     

- (void)makeKeyAndVisible;       
讓當(dāng)前UIWindow變成keyWindow,并顯示出來(lái)     

UIWindow的獲得

[UIApplication sharedApplication].windows     

在本應(yīng)用中打開的UIWindow列表丈氓,這樣就可以接觸應(yīng)用中的任何一個(gè)UIView對(duì)象
(平時(shí)輸入文字彈出的鍵盤周循,就處在一個(gè)新的UIWindow中)

[UIApplication sharedApplication].keyWindow    

用來(lái)接收鍵盤以及非觸摸類的消息事件的UIWindow,而且程序中每個(gè)時(shí)刻只能有一個(gè)UIWindow是keyWindow万俗。如果某個(gè)UIWindow內(nèi)部的文本框不能輸入文字湾笛,可能是因?yàn)檫@個(gè)UIWindow不是keyWindow

view.window     

獲得某個(gè)UIView所在的UIWindow

四大對(duì)象關(guān)系圖

文章來(lái)自我的博客,原文鏈接:http://www.terwer.com/ios-app-lunnch.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末闰歪,一起剝皮案震驚了整個(gè)濱河市嚎研,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌课竣,老刑警劉巖嘉赎,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異于樟,居然都是意外死亡公条,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門迂曲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)靶橱,“玉大人,你說(shuō)我怎么就攤上這事」匕裕” “怎么了传黄?”我有些...
    開封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)队寇。 經(jīng)常有香客問(wèn)我膘掰,道長(zhǎng),這世上最難降的妖魔是什么佳遣? 我笑而不...
    開封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任识埋,我火速辦了婚禮,結(jié)果婚禮上零渐,老公的妹妹穿的比我還像新娘窒舟。我一直安慰自己,他們只是感情好诵盼,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開白布惠豺。 她就那樣靜靜地躺著,像睡著了一般风宁。 火紅的嫁衣襯著肌膚如雪洁墙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天杀糯,我揣著相機(jī)與錄音扫俺,去河邊找鬼。 笑死固翰,一個(gè)胖子當(dāng)著我的面吹牛狼纬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播骂际,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼疗琉,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了歉铝?” 一聲冷哼從身側(cè)響起盈简,我...
    開封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎太示,沒(méi)想到半個(gè)月后柠贤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡类缤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年臼勉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片餐弱。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡宴霸,死狀恐怖囱晴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情瓢谢,我是刑警寧澤畸写,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站氓扛,受9級(jí)特大地震影響枯芬,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜采郎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一破停、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧尉剩,春花似錦、人聲如沸毅臊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)管嬉。三九已至皂林,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蚯撩,已是汗流浹背础倍。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留胎挎,地道東北人沟启。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像犹菇,于是被迫代替她去往敵國(guó)和親德迹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容