- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在重新创建某种特定于我的应用的 UIAlertView
,因此我将 UIWindow
子类化来执行此操作。该窗口被添加到 [UIApplication sharedApplication].windows
中,但从未实际显示。我将其精简为一小段代码:
UIWindow *testWindow = [[UIWindow alloc] initWithFrame:self.view.bounds];
testWindow.backgroundColor = [UIColor blueColor];
[testWindow makeKeyAndVisible];
当我登录[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>>"
然而,第二个具有蓝色背景颜色的窗口却不见踪影。
更新:这似乎仅在启用 ARC 时才会出现。我创建了 2 个新的“单 View ”项目,一个启用了 ARC,另一个禁用了 ARC。两者是相同的,我将 UIWindow 代码添加到主视图 Controller 的 viewDidAppear:
中。当我在模拟器中运行应用程序时,蓝色窗口仅显示在禁用 ARC 的项目中。看起来 ARC 太快地摆脱了我的 UIWindow,所以它甚至没有时间显示。使其__strong
没有帮助。还是一头雾水……
最佳答案
It looks like ARC gets rid of my UIWindow too quickly and so it doesn't even have time to show up. Making it
__strong
didn't help.
做什么__strong
?您在问题中显示的变量似乎是局部变量,仅在方法返回之前存在。当该方法返回时,变量消失,因此没有任何东西拥有该窗口,因此它将被释放。
将窗口的指针分配给 __strong
实例变量或 strong
属性。然后您将拥有更持久的所有权,使窗口保持活力。关闭窗口后,将 ivar 或属性设置为 nil
。
顺便说一句,您确定要使其成为 UIWindow 而不是 UIView 的子类吗?即使 UIAlertView 也是一个 View 而不是一个窗口。如果它创建自己的窗口,您可能想要这样做 - 让 View 创建自己的窗口作为实现细节。
关于iphone - UIWindow makeKeyAndVisible 与 ARC 配合不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8661240/
我是一名优秀的程序员,十分优秀!