iOS程序啓動原理(簡單)

1.執行main -> 執行UIApplicationMainapp

  1. UIApplicationMain底層實現 
    • 1.建立UIApplication對象
    • 2.建立UIApplication代理對象
    • 3.開啓主要事件循環,保證程序一直運行,開始處理事件
    • 4.解析info.plist,判斷下有沒有指定main.storyboard

3.指定main.storyboard就會加載函數

  • 1.建立窗口(一個程序要想顯示內容,必須有窗口)
  • 2.加載main.storyboard(UIStoryboard),建立storyboard描述的控制器(箭頭指向的控制器)
  • 3.設置窗口的根控制器
  • 4.顯示窗口

4.UIApplication對象spa

  • 單例:整個app下只分配一次內存
  • 獲取:shareApplication
  • 做用:1.設置提醒數字 2.設置聯網狀態 3.設置狀態欄 4.打電話,打開網頁

5.UIApplication代理代理

  • 代理:本身不想作的事情,就搞個代理幫我作
  • 做用:1.監聽應用程序生命週期方法 3.內存警告

6.窗口code

  • 做用:一個程序要想顯示內容,必須有窗口
  • 窗口建立方式:1.UIStoryboard 2.代碼
  • 窗口經過代碼建立注意 
    • 1.必需要強引用
    • 2.窗口要有尺寸
    • 3.必須設置窗口的根控制器
  • 窗口:鍵盤.狀態欄
  • 窗口層級 : alert > statusBar > normal
 
 程序啓動

 1.執行main函數 -> UIApplicationMain

 UIApplicationMain底層實現
  1.建立UIApplication對象
  2.建立UIApplication代理對象,設置UIApplication代理
  3.開啓主要事件循環,目的:讓程序一直運行,能夠處理事件
  4.解析info.plist,判斷下有沒有指定main.stroyboard
 1 int main(int argc, char * argv[]) {
 2     NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Info.plist" ofType:nil];
 3     NSDictionary *dcit = [NSDictionary dictionaryWithContentsOfFile:filePath];
 4     id objc = dcit[@"UIMainStoryboardFile"];
 5    
 6     @autoreleasepool {
 7          第三個參數:UIApplication類或者子類類型字符串,類型不能亂穿
 8          第四個參數:UIApplication代理類型字符串類型不能亂穿
 9          NSStringFromClass([AppDelegate class])
10          NSStringFromClass:把類名轉換成字符串
11         return UIApplicationMain(argc, argv, @"UIApplication", NSStringFromClass([AppDelegate class]));
12          若是直接寫字符串,弊端:有可能寫錯,沒有提示
13          NSStringFromClass:有提示,確定不會寫錯,編譯時期就會檢查錯誤
14        
15     }
16 }
相關文章
相關標籤/搜索