標籤:
一、程式啟動原理1.
首先找到程式入口,執行main函數
main -> UIApplicationMain
2.
UIApplicationMain底層做事情
1> 建立UIApplication對象
2> 建立UIApplication的代理對象,而且給UIApplication對象代理屬性賦值
3> 開啟主運行迴圈,作用接收事件,讓程式一直運行
4> 載入info.plist,判斷下有木有指定main.storyboard,如果指定就會去載入
3.建立UIWindow
1> 載入info.plist,判斷有沒有指定main.storyboard,指定了main.storyboard,就會去載入main.storyboard,執行main.storyboard的時候建立視窗,載入控制器,設定視窗的根控制器,顯示視窗。
2> 在載入info.plist檔案之後,如果沒有指定main.storyboard,會在程式啟動完成的時候建立視窗。 (手動建立視窗)
1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 2 // 視窗顯示的注意點: 3 // 1.一定要強引用 4 // 2.控制項要想顯示出來,必須要有尺寸 5 6 // 1.建立視窗 7 self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; 8 9 // 2.建立根控制器,在設定視窗的根控制器10 UIViewController *vc = [[UIViewController alloc] init];11 12 // 設定視窗的根控制器,底層會自動把根控制器的view添加到視窗上,並且讓控制器的view有旋轉功能13 self.window.rootViewController = vc;14 15 // 3.顯示視窗16 // makeKeyAndVisible:讓視窗成為應用程式的主視窗,並且顯示視窗17 [self.window makeKeyAndVisible];18 19 return YES;20 }
二、UIApplication
1> UIApplication對象是應用程式的象徵
2> 每一個應用都有自己的UIApplication對象,而且是單例的。通過[UIApplication sharedApplication]可以獲得這個單例對象。
3> 一個iOS程式啟動後建立的第一個對象就是UIApplication對象
4> 利用UIApplication對象,能進行一些應用層級的操作
1.應用程式圖片的提醒數字
1 // 擷取應用程式的象徵 2 UIApplication *app = [UIApplication sharedApplication]; 3 4 // 應用程式圖片的提醒數字 5 app.applicationIconBadgeNumber = 100; 6 7 // 建立通知對象 8 UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge categories:nil]; 9 // 註冊使用者通知10 [app registerUserNotificationSettings:settings];
2.連網狀態
1 // 連網狀態2 app.networkActivityIndicatorVisible = YES;
3.開啟資源,電話,網頁,發簡訊
1 // 開啟網頁2 NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];3 [app openURL:url];
4.設定狀態列
在iOS7之後,狀態列預設交給控制器處理
1 // 狀態列的隱藏 2 - (BOOL)prefersStatusBarHidden 3 { 4 return YES; 5 } 6 // 狀態列的樣式 7 - (UIStatusBarStyle)preferredStatusBarStyle 8 { 9 return UIStatusBarStyleLightContent;10 }
那麼在iOS7之後如何設定用UIApplication對象管理狀態列:
(在info.plist中添加一個字典View controller-based status bar appearance = NO)
使用UIApplication對象管理狀態列的好處
1.統一管理.(控制器很多的情況下用控制器不好管理)
// app.statusBarHidden = YES;
2. 隱藏狀態列可以設定動畫
1 [app setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
---恢複內容結束---
iOS的程式啟動原理