iOS之UIApplication的功能,代理和單例的簡單介紹

本章重點分為三個內(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;

    AEC51C19-5DDD-4E2B-AABD-EBFC908B07FD.png

  • 2.設(shè)置連網(wǎng)狀態(tài)
    ap.networkActivityIndicatorVisible = YES;

    C50342F7-2663-4D76-BDA0-58052CABFF0A.png

  • 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)欄,通過控制器的方式.同樣實現(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)都有個致命的缺點:```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à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ào)用
    只有當(dāng)一個應(yīng)用程序完全獲取到焦點,才能與用戶交互.
NSLog(@"%s",__func__);
}
  • 當(dāng)我們應(yīng)用程序即將關(guān)閉的時候調(diào)用
NSLog(@"%s",__func__);
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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