Fra*_*iet 23 iphone objective-c
我从后台线程中的Web服务加载数据.UIAlertView当出现任何问题或在主线程中显示警报视图时,在后台线程中显示是否安全?
感谢您的建议
坦率
Ant*_*udt 50
除主线程外,不要对GUI执行任何操作.它可能会导致非常奇怪的问题和/或您不想处理的崩溃.通常回溯也是非常无益的,所以默认情况下尽量避免这种问题.
因此使用此:
[self performSelectorOnMainThread:@selector(showAlert:) withObject:alertString waitUntilDone:NO];
Run Code Online (Sandbox Code Playgroud)
如果您正在使用Grand Central调度,您可以执行以下操作:
dispatch_async(dispatch_get_main_queue(), ^{ /* show alert view */ });
Run Code Online (Sandbox Code Playgroud)
更新:
斯威夫特(3.0+):
DispatchQueue.main.async { // code }
Run Code Online (Sandbox Code Playgroud)
在Notifications你接收到的情况下执行此操作有时会很有帮助,我有过从不同的线程中解雇的实例.
更新2:
看起来苹果已经在iOS11/Xcode9中添加了一些新工具,以帮助调试在错误的线程上调用内容的问题.
dispatch_async(dispatch_get_main_queue(), ^{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Title" message:@"Message" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
});
Run Code Online (Sandbox Code Playgroud)
这段代码适合我
| 归档时间: |
|
| 查看次数: |
17514 次 |
| 最近记录: |