因为要用UIwindow实现一个功能,所以最近了解了一下这个类,这篇文章主要记录一下我遇到的问题和我的想法。
UIWindow虽然继承自UIView,但是一个与UIView有显著不同的地方就是,UIWindow 的实例不需要作为任何子 view 加入到任何一个 view hierarchy 中,你一旦像这样
[[UIWindow alloc] init] 生成一个对象,它就自动被加入到[UIApplication sharedApplication].windows 这个数组,此时的UIWindow 对象的hidden 属性 是 NO,此时把它调整为 YES 再加上适当的 frame 设置,它就会出现在 device 的屏幕上了。
另一个让我困惑了一晚上的事情是, [UIApplication sharedApplication].windows 这个数组,对每一个生成的 UIWindow 对象,保持的都是一个弱引用,当你程序其它地方不再对一个UIWindow 对象保持引用后,windows这个数组也就无法再指向那个被释放的 UIwindow 对象了。一开始我还挺困惑,后来仔细想了一下,UIApplication sharedApplication]这个对象会伴随整个应用的生命周期,如果windows这个数组是强引用,那么我们在程序中任何一个地方new出来的UIWIndow对象,都会被这个数组强引用而导致在整个程序运行过程中都无法释放,比如临时用一个window,却一直引用了。所以在写代码的时候,一定不能依赖 [UIApplication sharedApplication].windows 这个数组来保持对UIWindow对象的引用。