iOS app啟動流程


最近看了些Runtime Runloop的一些知識.邊看邊摸索.看到群里有人在問 一些面試題.其中就提到了app的啟動流程.

所以這里也研究小結一下,以供自己學習備用.

1.項目要運行,就要有入口. OC語言的入口就在main.m 文件.下面看main.m里都有什么可以窺探的.

int main(int argc, char * argv[]) {
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

 

在自動釋放池里我們可以看到里面就一行代碼

return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));

 

這行代碼我們手打一下.可以看到傳的參數

UIApplicationMain(<#int argc#>, <#char * _Nonnull * _Null_unspecified argv#>, <#NSString * _Nullable principalClassName#>, <#NSString * _Nullable delegateClassName#>)

 

下面我們一步步解析這句關鍵的代碼如何啟動App

UIApplicationMain 就是OC的入門點. 里面傳遞了四個參數:

argc 是一個int參數

argv 是一個char 參數

principalClassName 主程序類名( 當值為 nil 時,默認是UIApplication)

delegateClassName 代理類名 默認就是常見的AppDelegate類

在上面的傳參時候用到了NSStringFromClass 方法.

NSStringFromClass 是將類名轉化為字符串的轉化函數.與此類似的還有字符串轉化類名的NSClassFromString.

2.設定了對象和代理之后就是NSRunloop 來保持程序一直運行處理事件(詳情請看上一篇說的runloop文章)

3.接下來就是info.plist文件.檢查是否通過main.storyboard加載指定的控制器. 把新創建的控制器作為窗口的跟控制器,讓窗口顯示出來.如果沒有則會在下面方法中創建UIWindow 來作為主窗口

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

//創建UIWindow 來作為主窗口

return YES;

}

 

4.最后通過執行程序AppDelegate的代理.程序完成啟動


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM