UIAlert 需要几秒钟才能显示

Posted

技术标签:

【中文标题】UIAlert 需要几秒钟才能显示【英文标题】:UIAlert takes a few seconds to show up 【发布时间】:2011-12-09 10:12:51 【问题描述】:

我遇到了一个问题,我的应用程序中的所有UIAlertViews 都需要很长时间才能显示出来。显示屏会立即变暗,但实际警报需要大约 5 秒才能显示。

我是这样创建它们的:

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Title"
                                                    message:@"Message"
                                                   delegate:nil 
                                          cancelButtonTitle:@"OK" 
                                          otherButtonTitles:nil];
[alertView show];
[alertView release];

有人吃过这个吗?

谢谢 -f

【问题讨论】:

这种情况发生在模拟器中、您的设备上还是两者兼而有之?是否有其他正在运行的进程可能会降低您的应用速度? 显示您正在调用的代码。 【参考方案1】:

如果您尝试不从主线程显示 UIAlertView,您会看到这种类型的延迟(有时还会出现更严重的错误和崩溃)。

将代码提取为单独的方法并使用“performSelectorOnMainThread”调用它,或者使用 GCD 并在那里调度它。

【讨论】:

对于我们中间的懒人:这可以使用[alert performSelectorOnMainThread:@selector(show) withObject:nil waitUntilDone:YES]; 而不是[alert show]; 来完成。【参考方案2】:

在那之后你在做什么?如果您进行一些计算并继续处理某些事情,则不会显示警报。它仅显示在运行循环的末尾。处理这个问题的最好方法是将工作分成更小的块,一个接一个地执行,同时让 runloop 处理介于两者之间的事件。或者将繁重的工作卸载到后台线程。

如果您只是尝试什么,如果这确实是您遇到的问题,请尝试添加

 [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.01]];

就在您上面的代码下方。

【讨论】:

[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.01]]; - 大写 L 代表循环

以上是关于UIAlert 需要几秒钟才能显示的主要内容,如果未能解决你的问题,请参考以下文章

在 UIAlert 视图中显示推送通知文本

应用程序运行时,iOS 推送通知显示为 UIAlert

当应用程序在后台运行时,iOS 会显示 UIAlert

Swift 4 - 如何在 UIAlert 中显示来自 JSON Alamofire 的错误响应

关于 UIAlert 跳转到一个 xib

iOS- UIAlert 仅在将应用程序图标更改为备用图标后才显示“确定”