本章重點(diǎn)分為三個內(nèi)容:
- UIApplication功能
- UIApplication單例
- UIApplication代理
UIApplication功能
1.設(shè)置應(yīng)用提醒數(shù)字
獲取
UIApplication
對象
UIApplication *ap = [UIApplication sharedApplication];
在設(shè)置之前, 要注冊一個通知,從
ios8
之后,都要先注冊一個通知對象.才能夠接收到提醒.
UIUserNotificationSettings *notice = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge categories:nil];
注冊通知對象
[ap registerUserNotificationSettings:notice];
-
設(shè)置提醒數(shù)字
ap.applicationIconBadgeNumber = 10;
-
2.設(shè)置連網(wǎng)狀態(tài)
ap.networkActivityIndicatorVisible = YES;
3.設(shè)置狀態(tài)欄
應(yīng)用程序的狀態(tài)欄,默認(rèn)是交給控制器來管理的.
控制器提供的方法,可以直接重寫這個方法
在控制器當(dāng)中設(shè)置狀態(tài)欄樣式
return UIStatusBarStyleLightContent;
}```
![C9C2A0E2-6F42-4564-92CD-38058128E763.png](http://upload-images.jianshu.io/upload_images/1701439-4b1ac43572f1c343.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
隱藏狀態(tài)欄,通過控制器的方式.同樣實(shí)現(xiàn)方法:
返回NO時為不隱藏
返回YES時為顯示
-(BOOL)prefersStatusBarHidden{
return NO;
}通常在開發(fā)當(dāng)中都是應(yīng)用程序來管理狀態(tài)欄的.來做統(tǒng)一管理,不然的話, 會有很多個控制器.會非常的麻煩. 想要讓應(yīng)用程序管理狀態(tài)欄,要在
info.plist當(dāng)中進(jìn)行配置, 添加一個
key值:是最后一個
View controller-based status bar appearance設(shè)置為
NO```.就是應(yīng)用程序來管理了.
通過
UIApplication
來管理狀態(tài).
1.獲取UIApplication
UIApplication *ap = [UIApplication sharedApplication];
2.設(shè)置狀態(tài)欄樣式.
ap.statusBarStyle = UIStatusBarStyleLightContent;
3.設(shè)置狀態(tài)的隱藏
ap.statusBarHidden = YES;
4.跳轉(zhuǎn)網(wǎng)頁
URL:協(xié)議頭://域名```
應(yīng)用程序通過協(xié)議頭的類型,去打開相應(yīng)的軟件.
```NSURL *url =[NSURL URLWithString:@"http://www.baidu.com"];
[ap openURL:url];```
- 打電話
```[application openURL:[NSURL URLWithString:@"tel://10086"]];```
- 發(fā)短信
```[app openURL:[NSURL URLWithString:@"sms://10086"]];```
###UIApplication單例
- 什么是```UIApplication```
```UIApplication```對象是應(yīng)用程序的象征.
每一個應(yīng)用都有自己的```UIApplication```對象,這個對象是系統(tǒng)自動幫我們創(chuàng)建的, 它是一個單例對象.
一個```iOS```程序啟動后創(chuàng)建的第一個對象就是```UIApplication```對象
我們只能通過```[UIApplication sharedApplication]```獲得這個單例對象,不能夠手動去創(chuàng)建它.
- ```UIApplication```作用
利用```UIApplication```對象,能進(jìn)行一些應(yīng)用級別的操作.
- 可以設(shè)置應(yīng)用程序圖標(biāo)右上角的紅色提醒數(shù)字
- 設(shè)置聯(lián)網(wǎng)指示器的可見性
- 可以設(shè)置應(yīng)用程序的狀態(tài)欄
- 進(jìn)行應(yīng)用之間的跳轉(zhuǎn).
- 模仿```UIApplication```單例.
- 要求:程序一啟動就創(chuàng)建創(chuàng)建對象.
- 創(chuàng)建的對象只能通過```share```的方式獲取對象.
- 不能夠進(jìn)行```alloc``` 操作,當(dāng)執(zhí)行```alloc```時, 程序發(fā)生崩潰
- 1.程序一啟動的時候就創(chuàng)建對象.
當(dāng)類被加載到內(nèi)存的時候就會調(diào)用```load```的方法,它會比```main```優(yōu)先調(diào)用
```static Persion *_instance;
+(void)load{
想要保存創(chuàng)建的對象, 要用成員屬性,但是現(xiàn)在是類方法, 沒有辦法訪問成員屬性.
所以搞了一個static的靜態(tài)變量進(jìn)行保存
創(chuàng)建對象
_instance = [[self alloc] init];
}
- 2.保證調(diào)用
alloc
時會產(chǎn)生異常.
重寫系統(tǒng)的是alloc
方法
當(dāng)調(diào)用alloc方法時,先查看一下_instance有沒有值,如果已經(jīng)有值的話,直接拋出異常.
if(_instance){
NSException *exception = [NSException exceptionWithName:
@"NSInternalInconsistencyException"
reason:
@"There can only be one Persion instance." userInfo:nil];
拋出異常
[exception raise];
}
保持系統(tǒng)的做法.
return [super alloc];
}
- 3.通過
share
方式獲取對象
return _instance
}```
###UIApplication代理
所有的移動操作系統(tǒng)都有個致命的缺點(diǎn):```app```很容易受到打擾枯冈。
比如一個來電或者鎖屏?xí)?dǎo)致```app```進(jìn)入后臺甚至被終止
還有很多其它類似的情況會導(dǎo)致```app```受到干擾撒妈,在```app```受到干擾時打掘,會產(chǎn)生一些系統(tǒng)事件,
這時```UIApplication```會通知它的```delegate```對象妄讯,讓```delegate```代理來處理這些系統(tǒng)事件
- ```delegate```可處理的事件包括:
- 應(yīng)用程序的生命周期事件(如程序啟動和關(guān)閉)
- 系統(tǒng)事件(如來電)
- 內(nèi)存警告
- ...
- ```UIApplication```會在程序一啟動創(chuàng)建一個遵守```UIApplicationDelegate```代理.
這個就是我們程序一創(chuàng)建時的```AppDelegate```類.```AppDelegate```就是遵守了```UIApplicationDelegate```協(xié)議.
在這個類中很定義很多監(jiān)聽系統(tǒng)事件的方法.同時也定義了一些應(yīng)用程序的生命周期方法.
- 主要方法有:
應(yīng)用程序的生命周期
- 應(yīng)用程序啟動完成的時候調(diào)用
```- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSLog(@"%s",__func__);
return YES;
}
- 當(dāng)我們應(yīng)用程序即將失去焦點(diǎn)的時候調(diào)用
NSLog(@"%s",__func__);
}
- 當(dāng)我們應(yīng)用程序完全進(jìn)入后臺的時候調(diào)用
NSLog(@"%s",__func__);
}
- 當(dāng)我們應(yīng)用程序即將進(jìn)入前臺的時候調(diào)用
NSLog(@"%s",__func__);
}
- 當(dāng)我們應(yīng)用程序完全獲取焦點(diǎn)的時候調(diào)用
只有當(dāng)一個應(yīng)用程序完全獲取到焦點(diǎn),才能與用戶交互.
NSLog(@"%s",__func__);
}
- 當(dāng)我們應(yīng)用程序即將關(guān)閉的時候調(diào)用
NSLog(@"%s",__func__);
}