本文所有的結(jié)論都是在iOS9的情況下械念。
先來看看UIWindow 的一些子類夺巩,如下圖所示板熊。
1蛋济、目前UIWindow 的 windowLevel 的取值范圍是 (0.0-10000000.0)
2西设、如果新建一個window瓣铣,想把它變?yōu)閗eyWindow,這個window是局部變量的時候贷揽,會沒有效果棠笑。
3、并不是執(zhí)行了makeKeyAndVisible/makeKeyWindow/becomeKeyWindow 方法 禽绪,window 就一定會變成keyWindow蓖救。比如,當(dāng)系統(tǒng)AlertView 出現(xiàn)時丐一,keyWindow是_UIAlertControllerShimPresenterWindow,這個時候keyWindow 就是不可覆蓋的藻糖。
4、_UIAlertControllerShimPresenterWindow 這個系統(tǒng)AlertView的載體window 不在[UIApplication sharedApplication].windows 數(shù)組中库车。
5巨柒、當(dāng)判斷或設(shè)置 app的 rootViewController的時候,推薦使用[[UIApplication sharedApplication].delegate window].rootViewController 而不是[[UIApplication sharedApplication]keyWindow].rootViewController,后者偶爾會出現(xiàn)它并不是你想要的那個controller洋满。
最后附上 _UIAlertControllerShimPresenterWindow的層次結(jié)構(gòu)圖,供大家學(xué)習(xí)研究晶乔。