以当前控制器 UIViewController 为例:
@interface Class Name ()
// 防止窗口被自动销毁
@property (nonatomic) UIWindow *window;
@end
正确添加窗口的方法
// 1.创建窗口
UIWindow *subWin = [[UIWindow alloc] initWithFrame:subWinRect];
// 2. 一定要有一个强指针指向subWin(创建的窗口), 否则, 会创建的窗口会马上被释放掉
self.subWindow = subWin;
// 2.添加窗口根控制器
subWin.rootViewController = rootVC;
// 3.设置显示在当前视图上
[subWin makeKeyAndVisible];
注意: 千万不要用 [self.view addSubview:subWin] 显示窗口, 否则窗口无法被释放
正确释放窗口的方法
// 1.恢复主窗口, 通知subWin 执行 resignKeyWindow
[self.view.window makeKeyAndVisible];
注意: 千万不要直接调用 resignKeyWindow(Apple文档上有说明), 在其他窗口执行 makeKeyAndVisible 的时候, 当前窗口会自动执行 resignKeyWindow, 然后被自动释放
// 2.移除subWin的根控制器
subWin.rootViewController = nil;
// 3.将subWin置空
subWin = nil;