我可以在单独的线程上构建UIView元素吗?

时间:2012-10-24 22:24:21

标签: objective-c ios multithreading uiview uiactivityindicatorview

我有一个应用程序必须加载并在屏幕上呈现相当数量的内容(主要是从数据库加载)。

我不会在这里发布所有代码,但实际上它只是构建了一组添加到UIScrollView对象的UIView对象。没有什么太复杂,只是加载了很多东西。这当前需要一秒左右渲染一切(在主线程上运行)。

我希望在加载发生时显示一个活动指示器,而我认为这样做的最佳方法是让后台线程需要很长时间的方法和“报告” “当它完成时。”

问题是这个。我知道所有实际绘图都是由主线程完成的,所以是否可以创建一个新线程并构建一组UIView对象然后在屏幕上绘制?

2 个答案:

答案 0 :(得分:3)

有一个很棒的WWDC2012会话视频,完全符合您的用例:

WWDC2012 Building Concurrent User Interfaces in iOS

基本上诀窍是准备并在另一个队列上绘制视图并将其发送到主队列。

答案 1 :(得分:0)

你是对的。所有UI工作都应该在主线程上完成。在您的情况下,我建议您添加滚动视图可见的UIView对象,并仅在scrollview开始移动到该点时添加其余对象。您可以在视图即将可见时继续添加视图,并从滚动视图中删除不需要的任何视图。这通常有助于更好的内存管理。