1. 程式人生 > >[UIApplication sharedApplication].keyWindow和[[UIApplication sharedApplication].delegate window]區別

[UIApplication sharedApplication].keyWindow和[[UIApplication sharedApplication].delegate window]區別

在專案開發過程中經常有需要在window上新增各種文字提示框,今天我們就有這麼一個需求,查了各種資料說有不同的獲取方法但是用到的最多的是[UIApplication sharedApplication].keyWindow[[UIApplication sharedApplication].delegate window] 這兩種方式。但是這兩種獲取window獲取方式有什麼區別呢,我特意從程式碼裡面測試了一下。
一般情況下,我們在appdelegate檔案中都會這樣寫在這裡插入圖片描述

隨後,我再專案中添加了如下程式碼
在這裡插入圖片描述
在這裡插入圖片描述
執行之後發現,程式碼執行如下
在這裡插入圖片描述

這說明在執行 didFinishLaunchingWithOptions:

這個代理方法時,在執行[self.window makeKeyAndVisible];方法之前,通過[UIApplication sharedApplication].keyWindow 方法獲取不到window,且在執行[UIApplication sharedApplication].keyWindow之前是要執行,rootviewcontroller的程式碼的,因此先執行了controller中的程式碼,但是在controller中我們發現,在viewWillAppearviewDidLoad 中的keywindow也是nil,但是在直到viewWillLayoutSubviews時才有了keywindow的值。但是無論何時都能獲取到delegate.window。

結論
1、在獲取到window時最好使用[[UIApplication sharedApplication].delegate window]獲取window
2、不要在keywindow為nil的時候給window上新增程式碼,例如新增彈窗。

我是磊懷 我的QQ : 2849765859