我如何在后台线程中准备我的UI?

一个UIViewController需要大约半秒来加载其内容并出现在屏幕上。 我怎样才能使他们都加载在后台,并显示他们准备好了?

Apple开发人员网站上有一个LazyTableImages示例。

它显示了如何在后台线程中执行繁重的工作并更新主线程上的UI。

PerformSelectorInBackground:withObject:是一个可能的解决scheme,但更现代的方法是使用asynchronous块。 您可以在这些块内的主线程上运行代码以安全地更新UI。

“并发编程指南”是查找更多信息和示例的好地方。

后台线程不能更新UI,你可以在后台线程中执行所有的处理逻辑,并调用UI更新的主线程

示例加载一个tableView与数据,使用后台线程来处理一切,并加载数据,使用主线程调用[tableView reloadData] ,请参阅大中央调度,以了解如何使用线程在IOS ..

希望能帮助到你

创build一个GCD队列在后台线程中处理你的工作(阅读文档,因为我的“创build”标签和选项可能不是你想要的)。

您可以asynchronous地将其发送到队列中,这意味着对dispatch_async的调用将对您提供的代码块在另一个线程中运行做出适当的安排,然后将立即返回给您。

你给它的块中的所有工作将在一个单独的线程上执行。 请注意,最后,你会打另一个电话,这次是知道主队列。 这将安排代码在主线程中运行,这对于任何UI工作都是必需的。

此外,你真的应该阅读关于GCD的文档,特别是块,因为有内存和循环的考虑。 祝你好运。

 dispatch_queue_t workQ = dispatch_queue_create("bgWorkQ", 0); dispatch_async(workQ, ^{ // This code is now running in a background thread. // Do all your loading here... // When ready to touch the UI, you must do that in the main thread... disptach_async(dispatch_get_main_queue(), ^{ // Now, this code is running in the main thread. // Update your UI... }); }); dispatch_release(workQ); 

最简单的方法是使用NSObject的- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg你只是通过一个select器,它会在后台快乐,而不是阻止你的用户界面。 但请注意,后台线程有规则。

你不应该从后台线程更新你的用户界面。 你需要确保你所调用的方法是线程安全的。