什么是UIApplication蔫骂?
UIApplication對(duì)象是應(yīng)用程序的象征,每個(gè)應(yīng)用都有自己的UIApplication對(duì)象开缎,當(dāng)iOS程序啟動(dòng)后創(chuàng)建的第一個(gè)對(duì)象就是UIApplication對(duì)象粒褒,而且是單例的,通過[UIApplication shareApplication]
可以獲得這個(gè)單例對(duì)象耿焊。利用UIApplication對(duì)象揪惦,能進(jìn)行一些應(yīng)用級(jí)別的操作。
它能設(shè)置哪些些應(yīng)用級(jí)別操作
- 設(shè)置badge(應(yīng)用圖標(biāo)上的小紅點(diǎn))
//1.設(shè)置應(yīng)用程序圖標(biāo)的提醒數(shù)字
app.applicationIconBadgeNumber = 10;
//iOS8之后必須注冊用戶通知罗侯,否則不生效
//iOS10之前
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];
[app registerUserNotificationSettings:settings];
- 設(shè)置聯(lián)網(wǎng)指示器的可見性(信號(hào)欄旁邊的小菊花 )
//2.設(shè)置聯(lián)網(wǎng)的提示
app.networkActivityIndicatorVisible = YES;
- 設(shè)置狀態(tài)欄
//在Controller中的管理狀態(tài)欄方法
- (BOOL)prefersStatusBarHidden{
return YES;
}
//利用UIApplication對(duì)象管理
//1.在info.plist文件中添加View controller-based status bar appearance 并將值設(shè)為NO
//2.設(shè)置隱藏
app.statusBarHidden=YES;
- 打開網(wǎng)頁
[app openURL:[NSURL URLWithString:@"http://www.baidu.com"] options:nil completionHandler:nil];
UIApplication和delegate
所有的移動(dòng)操作系統(tǒng)都有一個(gè)致命的缺點(diǎn):app很容易收到干擾器腋。比如一個(gè)來電或者鎖屏,都會(huì)導(dǎo)致app進(jìn)入后臺(tái)甚至被終止钩杰,還有很多其他類似的情況會(huì)導(dǎo)致App受到干擾纫塌,在App收到干擾時(shí),會(huì)產(chǎn)生一些系統(tǒng)事件讲弄,這時(shí)UIApplication會(huì)通知它的delegate對(duì)象措左,讓delegate代理來處理這些系統(tǒng)事件。
delegate可處理的事件
- 應(yīng)用程序的生命周期時(shí)間(如程序啟動(dòng)和關(guān)閉)
- 系統(tǒng)事件(如來電)
- 內(nèi)存警告
AppDelegate其實(shí)就是UIApplication的delegate對(duì)象垂睬。
AppDelegate
- 程序啟動(dòng)完成就會(huì)調(diào)用的代理方法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
- 管理app生命周期的幾個(gè)方法
//應(yīng)用程序失去焦點(diǎn)的時(shí)候調(diào)用(將進(jìn)入后臺(tái))
- (void)applicationWillResignActive:(UIApplication *)application
//當(dāng)用戶進(jìn)入后臺(tái)的時(shí)候調(diào)用
- (void)applicationDidEnterBackground:(UIApplication *)application
//當(dāng)用戶進(jìn)入將前臺(tái)的時(shí)候調(diào)用
- (void)applicationWillEnterForeground:(UIApplication *)application
//用戶完全獲取焦點(diǎn)(完全進(jìn)入前臺(tái))
- (void)applicationDidBecomeActive:(UIApplication *)application
//App即將被Kill的方法
- (void)applicationWillTerminate:(UIApplication *)application
UIApplicationMain(Main函數(shù)中)
在main函數(shù)中調(diào)用UIApplicationMain
函數(shù)創(chuàng)建UIApplication和AppDelegate媳荒。
//UIApplicationMain
UIApplicationMain(int argc, char *argv[], NSString * __nullable principalClassName, NSString * __nullable delegateClassName);
底層實(shí)現(xiàn):
- 根據(jù)principalClassName參數(shù)傳遞的類名創(chuàng)建UIApplication對(duì)象
- 創(chuàng)建UIApplication代理對(duì)象,給 UIApplication設(shè)置代理
- 開啟主運(yùn)行事件循環(huán)抗悍,處理事件(RunLoop)
- 加載Info.plist,判斷是否指定main,如果指定了钳枕,就去加載
如何拋異常
//創(chuàng)建異常
NSException * exc = [NSException exceptionWithName:@"異常名稱" reason:@"異常原因" userInfo:nil];
//拋異常
[exc raise];