[UIApplication sharedApplication].keyWindow和[[UIApplication sharedApplication].delegate window]區別
阿新 • • 發佈:2018-12-17
在專案開發過程中經常有需要在window上新增各種文字提示框,今天我們就有這麼一個需求,查了各種資料說有不同的獲取方法但是用到的最多的是[UIApplication sharedApplication].keyWindow
和[[UIApplication sharedApplication].delegate window]
這兩種方式。但是這兩種獲取window獲取方式有什麼區別呢,我特意從程式碼裡面測試了一下。
一般情況下,我們在appdelegate檔案中都會這樣寫
隨後,我再專案中添加了如下程式碼
執行之後發現,程式碼執行如下
這說明在執行 didFinishLaunchingWithOptions:
[self.window makeKeyAndVisible];
方法之前,通過[UIApplication sharedApplication].keyWindow
方法獲取不到window,且在執行[UIApplication sharedApplication].keyWindow
之前是要執行,rootviewcontroller的程式碼的,因此先執行了controller中的程式碼,但是在controller中我們發現,在viewWillAppear
和viewDidLoad
中的keywindow也是nil,但是在直到viewWillLayoutSubviews
時才有了keywindow的值。但是無論何時都能獲取到delegate.window。結論
1、在獲取到window時最好使用[[UIApplication sharedApplication].delegate window]
獲取window
2、不要在keywindow為nil的時候給window上新增程式碼,例如新增彈窗。
我是磊懷 我的QQ : 2849765859