UIApplication

1.什么是UIApplication?

UIApplication對象是應(yīng)用程序的象征
每一個應(yīng)用都有自己的UIApplication對象,而且是單例的
通過[UIApplication sharedApplication]可以獲得這個單例對象
一個iOS程序啟動后創(chuàng)建的第一個對象就是UIApplication對象
利用UIApplication對象,能進行一些應(yīng)用級別的操作
注意:UIApplication不能手動創(chuàng)建,不能alloc init,一個應(yīng)用程序只允許 一個。 為什么要弄成單例,UIApplication對象是用來設(shè)置應(yīng)用全局信息的,一個 應(yīng)用程序如果有很多UIApplication對象,都不知道聽誰的。 驗證:單例和不能alloc,init

2.UIApplication的作用:做應(yīng)用級別的操作
2.1> 設(shè)置應(yīng)用圖標(biāo)右上角的數(shù)字,圖標(biāo)需要手動清除,應(yīng)用程序關(guān)閉,不 會自動清除.

applicationIconBadgeNumber:

 @property(nonatomic) NSInteger applicationIconBadgeNumber;

設(shè)置聯(lián)網(wǎng)指示器的可見性
@property(nonatomic,getter=isNetworkActivityIndicatorVisible) BOOL networkActivityIndicatorVisible;

2.2>顯示聯(lián)網(wǎng)狀態(tài),告訴用戶此應(yīng)用正在聯(lián)網(wǎng) networkActivityIndicatorVisible

2.3>打開一個資源

UIApplication有個功能十分強大的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://12345@qq.com”]];

打開一個網(wǎng)頁資源
[app openURL:[NSURL URLWithString:@”http://ios.itcast.cn”]];

打開其他app程序
3.URL:一個資源的唯一路徑

3.1>網(wǎng)絡(luò)資源URL的組成==協(xié)議頭://主機域名/路徑 http://www.baidu.com/abc/1.png

3.2>本地資源URL的組成==協(xié)議頭:///路徑 本機域名可以不寫 file:///User/apple/Desktop/1.png

4.UIApplication打開資源的好處:不用判斷用什么軟件打開,系統(tǒng)會自動根據(jù) 協(xié)議頭判斷。
5.UIApplication管理狀態(tài)欄.

從iOS7開始,系統(tǒng)提供了2種管理狀態(tài)欄的方式
通過UIViewController管理(每一個UIViewController都可以擁有自己不同的狀態(tài)欄)
通過UIApplication管理(一個應(yīng)用程序的狀態(tài)欄都由它統(tǒng)一管理)
在iOS7中,默認情況下,狀態(tài)欄都是由UIViewController管理的,UIViewController實現(xiàn)下列方法就可以輕松管理狀態(tài)欄的可見性和樣式
狀態(tài)欄的樣式
– (UIStatusBarStyle)preferredStatusBarStyle;

狀態(tài)欄的可見性
(BOOL)prefersStatusBarHidden;
如果想利用UIApplication來管理狀態(tài)欄,首先得修改Info.plist的設(shè)置
View controller-based status bar appearance 設(shè)置
5.1> ios7默認交給控制器,需要配置下,不交給控制器管理,就會交個 UIApplication管理。
5.2>動畫隱藏狀態(tài)欄
5.3>動畫設(shè)置狀態(tài)欄樣式

Delegate

1.AppDelegate的作用:
? 為什么要搞個AppDelegate,代理設(shè)計模式,有些事情自己不想處理,交給別人處理

所有的移動操作系統(tǒng)都有個致命的缺點:app很容易受到打擾。比如一個來電或者鎖屏?xí)?dǎo)致app進入后臺甚至被終止
還有很多其它類似的情況會導(dǎo)致app受到干擾,在app受到干擾時,會產(chǎn)生一些系統(tǒng)事件,這時UIApplication會通知它的delegate對象,讓delegate代理來處理這些系統(tǒng)事件
delegate可處理的事件包括:
應(yīng)用程序的生命周期事件(如程序啟動和關(guān)閉)
系統(tǒng)事件(如來電)
內(nèi)存警告
? 怎么成為UIApplication的代理,遵守協(xié)議。

// app接收到內(nèi)存警告時調(diào)用

   – (void)applicationDidReceiveMemoryWarning:(UIApplication *)application;

  // app進入后臺時調(diào)用(比如按了home鍵)

   – (void)applicationDidEnterBackground:(UIApplication *)application;

  // app啟動完畢時調(diào)用

   – (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;

2.在哪設(shè)置UIApplication的代理,需要了解ios程序的啟動過程.
2.1> 創(chuàng)建application,創(chuàng)建并且設(shè)置application的代理
2.2> 開啟事件循環(huán),不斷監(jiān)聽事件。如果產(chǎn)生系統(tǒng)事件,就會通知代 理,其他事件,會找到一個最合適的視圖處理事件。 2.3>只有應(yīng)用程序關(guān)閉,才會結(jié)束程序

3.UIApplicationMain函數(shù):

main函數(shù)中執(zhí)行了一個UIApplicationMain這個函數(shù)
int UIApplicationMain(int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName);
argc、argv:直接傳遞給UIApplicationMain進行相關(guān)處理即可
principalClassName:指定應(yīng)用程序類名(app的象征),該類必須是UIApplication(或子類)。如果為nil,則用UIApplication類作為默認值
delegateClassName:指定應(yīng)用程序的代理類,該類必須遵守UIApplicationDelegate協(xié)議
? 注意UIApplicationMain函數(shù)會開啟一個事件循環(huán),并不會馬上就執(zhí)行完畢。
? 底層做的事情,創(chuàng)建UIApplication對象和UIApplicationDelegate對象,設(shè)置UIApplication的代理,開啟事件循環(huán),監(jiān)聽系統(tǒng)事件。

UIApplicationMain函數(shù)會根據(jù)principalClassName創(chuàng)建UIApplication對象,根據(jù)delegateClassName創(chuàng)建一個delegate對象,并將該delegate對象賦值給UIApplication對象中的delegate屬性
接著會建立應(yīng)用程序的Main Runloop(事件循環(huán)),進行事件的處理(首先會在程序完畢后調(diào)用delegate對象的application:didFinishLaunchingWithOptions:方法)
程序正常退出時UIApplicationMain函數(shù)才返回
3.1> delegateClassName不能傳nil,這里傳nil,意味著application沒有 代理,就無法監(jiān)聽系統(tǒng)的事件,系統(tǒng)的事件都沒法監(jiān)聽,窗口都不知道 什么時候去加載,因為視圖都是懶加載的,因此就不會創(chuàng)建窗口,什么 東西都沒有。
3.2> principalClassName傳nil,默認是UIApplication,創(chuàng)建一個 UIApplication對象。
4.UIApplication代理的作用:處理系統(tǒng)事件,不是任何事件都交給他處理,按 鈕點擊,屏幕點擊都不是他處理,是由UIApplication處理。

2.1>加載完成,初始化的操作
2.2> 進入后臺:一般在這里保存應(yīng)用的數(shù)據(jù)(游戲數(shù)據(jù),比如暫停游戲) 2.3>內(nèi)存警告:清空不必要的內(nèi)容

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容