sam*_*tte 4 iphone cocoa-touch uikit
我正在重新创建某种UIAlertView特定于我的应用程序,所以我正在进行子类化UIWindow.窗口被添加到[UIApplication sharedApplication].windows,但实际上从未显示过.我把它修剪成这段小代码:
UIWindow *testWindow = [[UIWindow alloc] initWithFrame:self.view.bounds];
testWindow.backgroundColor = [UIColor blueColor];
[testWindow makeKeyAndVisible];
Run Code Online (Sandbox Code Playgroud)
当我登录时[UIApplication sharedApplication].windows,我看到:
"<UIWindow: 0x83774f0; frame = (0 0; 320 480); opaque = NO; autoresize = RM+BM; layer = <UIWindowLayer: 0x8377660>>",
"<UIWindow: 0x8382630; frame = (0 0; 300 400); layer = <UIWindowLayer: 0xf573e60>>"
Run Code Online (Sandbox Code Playgroud)
然而,现在可以看到具有蓝色背景颜色的第二个窗口.
更新:这似乎只有在启用ARC时才会出现问题.我创建了2个新的"单视图"项目,一个启用了ARC,另一个启用了ARC.两者都是相同的,我将UIWindow代码添加到viewDidAppear:主视图控制器.当我在模拟器中运行应用程序时,蓝色窗口仅显示在禁用ARC的项目中.看起来ARC过快地摆脱了我的UIWindow,所以它甚至没有时间出现.让它__strong没有帮助.还是一无所知......
Pet*_*sey 11
看起来ARC过快地摆脱了我的UIWindow,所以它甚至没有时间出现.让它
__strong没有帮助.
做什么__strong?您在问题中显示的变量似乎是一个局部变量,该变量仅在方法返回之前存在.当方法返回时,变量消失,因此没有任何东西拥有窗口,因此它将被释放.
将窗口的指针指定给__strong实例变量或strong属性.那么你将拥有更持久的所有权,让窗户保持活力.nil在关闭窗口后将ivar或属性设置为.
作为旁注,您确定要将它作为UIWindow的子类而不是UIView吗?甚至UIAlertView也是一个视图,而不是一个窗口.如果它创建了自己的窗口,您可能希望这样做 - 让视图创建自己的窗口作为实现细节.
| 归档时间: |
|
| 查看次数: |
2246 次 |
| 最近记录: |