iOS Application

認(rèn)識(shí)UIApplication

  • UIApplication是應(yīng)用程序的象征
  • 每一個(gè)應(yīng)用都有自己的UIApplication對(duì)象,而且是單例的
  • 通過[UIApplication shareApplication]可以獲取單例對(duì)象
  • 一個(gè)程序啟動(dòng)后創(chuàng)建的第一個(gè)對(duì)象就是UIApplication對(duì)象
  • 利用UIApplication對(duì)象,可以進(jìn)行一些應(yīng)用級(jí)別操作

UIApplication的常用屬性

  • 設(shè)置App圖標(biāo)右上角提醒數(shù)字
@property(nonatomic) NSInteger applicationIconBadgeNumber;

iOS 10前的使用方式

    UIApplication *app = [UIApplication sharedApplication];
    //App圖標(biāo)右上角數(shù)字
    app.applicationIconBadgeNumber = 12;
    
    UIUserNotificationSettings *setting = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge categories:nil];
    //需要注冊(cè)通知對(duì)象
    [app registerUserNotificationSettings:setting];

iOS 10后的使用方式

    UIApplication *app = [UIApplication sharedApplication];
    //App圖標(biāo)右上角數(shù)字
    app.applicationIconBadgeNumber = 12;
    UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
    [center requestAuthorizationWithOptions:UNAuthorizationOptionBadge completionHandler:^(BOOL granted, NSError * _Nullable error) {
        
    }];
  • 聯(lián)網(wǎng)指示器的可見性
@property(nonatomic,getter=isNetworkActivityIndicatorVisible) BOOL networkActivityIndicatorVisible __TVOS_PROHIBITED; // showing network spinning gear in status bar. default is NO
app.networkActivityIndicatorVisible = YES;
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        app.networkActivityIndicatorVisible = NO;
    });
  • 設(shè)置狀態(tài)欄
@property(readwrite, nonatomic,getter=isStatusBarHidden) BOOL statusBarHidden NS_DEPRECATED_IOS(2_0, 9_0, "Use -[UIViewController prefersStatusBarHidden]") __TVOS_PROHIBITED;

iOS 9以后使用prefersStatusBarHidden方法隱藏狀態(tài)欄

- (BOOL)prefersStatusBarHidden{
    return YES;
}
  • openURL調(diào)用打電話,發(fā)短信,發(fā)郵件,打開網(wǎng)頁等功能
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://123456"] options:0 completionHandler:^(BOOL success) {
}];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.baidu.com"] options:0 completionHandler:^(BOOL success) {
}];

UIApplication的代理方法AppDelegate

//App啟動(dòng)完畢的時(shí)候調(diào)用
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    NSLog(@"App啟動(dòng)完畢的時(shí)候調(diào)用");
    return YES;
}

//當(dāng)App失去焦點(diǎn)的時(shí)候調(diào)用
- (void)applicationWillResignActive:(UIApplication *)application {
    //當(dāng)應(yīng)用程序即將從活動(dòng)狀態(tài)轉(zhuǎn)移到非活動(dòng)狀態(tài)時(shí)發(fā)送。這可能發(fā)生在某些類型的臨時(shí)中斷(如來電或SMS消息)或用戶退出應(yīng)用程序并開始過渡到后臺(tái)狀態(tài)時(shí)。
    //使用此方法暫停正在進(jìn)行的任務(wù),禁用計(jì)時(shí)器,并使圖形呈現(xiàn)回調(diào)失效。游戲應(yīng)該使用這種方法暫停游戲。
    NSLog(@"App失去焦點(diǎn)");
}

//App進(jìn)入后臺(tái)
- (void)applicationDidEnterBackground:(UIApplication *)application {
   //使用此方法釋放共享資源、保存用戶數(shù)據(jù)、使計(jì)時(shí)器失效,并存儲(chǔ)足夠的應(yīng)用程序狀態(tài)信息,以便在以后終止應(yīng)用程序時(shí)將其恢復(fù)到當(dāng)前狀態(tài)
    NSLog(@"App已經(jīng)進(jìn)入后臺(tái)");
}

//App將要從后臺(tái)進(jìn)入前臺(tái)的時(shí)候調(diào)用
- (void)applicationWillEnterForeground:(UIApplication *)application {
    NSLog(@"App將要后臺(tái)進(jìn)入前臺(tái)的時(shí)候調(diào)用");
}

//當(dāng)App完全獲取到焦點(diǎn)的時(shí)候調(diào)用,只有當(dāng)App完全獲取到焦點(diǎn),才能與用戶交互
- (void)applicationDidBecomeActive:(UIApplication *)application {
    NSLog(@"App完全獲取到焦點(diǎn)");
}

//當(dāng)應(yīng)用程序即將終止時(shí)調(diào)用。如果適當(dāng)?shù)谋4鏀?shù)據(jù)
- (void)applicationWillTerminate:(UIApplication *)application {
    NSLog(@"應(yīng)用程序即將終止時(shí)調(diào)用");
}

//App接收到內(nèi)存警告的時(shí)候調(diào)用
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application{
    NSLog(@"App內(nèi)存警告");
}

main()函數(shù)的UIApplicationMain函數(shù)底層實(shí)現(xiàn)

int main(int argc, char * argv[]) {
    @autoreleasepool {
        //第三個(gè)參數(shù):UIApplication的類名或子類的名稱, nil == @"UIApplication"
        //第四個(gè)參數(shù):UIApplication代理的代理名稱,NSStringFromClass([AppDelegate class] == @"AppDelegate"
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

UIApplicationMain函數(shù)實(shí)現(xiàn)

  1. 根據(jù)第三個(gè)參數(shù)principalClassName傳遞的類名創(chuàng)建UIApplication對(duì)象
  2. 根據(jù)第四個(gè)參數(shù)delegateClassName創(chuàng)建AppDelegate代理對(duì)象,給UIAplication設(shè)置代理
  3. 開啟run loop主事件循環(huán),開始監(jiān)聽處理事件
  4. 加載Info.plist文件,判斷是否指定main,如果指定了就會(huì)去加載.
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時(shí)...
    歐辰_OSR閱讀 30,203評(píng)論 8 265
  • OC語言基礎(chǔ) 1.類與對(duì)象 類方法 OC的類方法只有2種:靜態(tài)方法和實(shí)例方法兩種 在OC中,只要方法聲明在@int...
    奇異果好補(bǔ)閱讀 4,517評(píng)論 0 11
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,626評(píng)論 1 32
  • 1、通過CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫組件 SD...
    陽明AI閱讀 16,185評(píng)論 3 119
  • 打開程序 執(zhí)行main函數(shù) 執(zhí)行UIApplicationMain函數(shù)UIApplicationMain底層實(shí)現(xiàn):...
    Mitchell閱讀 14,522評(píng)論 7 23

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