gpt4 book ai didi

iphone - UIWindow makeKeyAndVisible 与 ARC 配合不佳

转载 作者:行者123 更新时间:2023-12-03 19:05:24 25 4
gpt4 key购买 nike

我正在重新创建某种特定于我的应用的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com