0

我正在尝试展示一个模态vc。但这需要大约 5 秒左右的时间,当用户尝试点击按钮直到他们在屏幕上看到一些东西时,延迟似乎很重要。

我的模态视图有 3 页,每页有 6 个表作为子视图。我没有使用任何网络连接。所有表都是从本地 xml 数据加载的。

所以,我的问题是 1) 有没有办法可以提高加载的模态 vc 的性能?2)或者我可以显示一个活动指示器并让视图在后台线程上加载并在加载完成后删除指示器?

我尝试了选项 2。我在 viewDidLoad上启动了活动指示器,并使用performSelectorInBackground方法在后台线程中启动了所有页面初始化代码 。但是,这让我的桌子看起来很奇怪,框架都变形了,宽度被弄乱了等等。任何建议都会对我有很大帮助。

4

2 回答 2

2

永远不要在后台线程中显示或修改界面元素。如果您在后台线程中并且想在主线程中执行某些操作,则可以使用选择器:

[self performSelectorOnMainThread:@selector(doSomething:)
                       withObject:someObject
                    waitUntilDone:NO];

或者你可以使用 GCD(我最喜欢的):

dispatch_async(dispatch_get_main_queue(), ^{
    [self doSomething:someObject];
});

无论您使用哪种方法,只要确保如果您在后台线程中加载数据然后尝试从该后台线程加载视图,请始终在主线程上执行该调用,否则您将得到您提到的奇怪行为.

于 2011-06-27T16:45:53.233 回答
0

您可以在 viewDidAppear 上显示活动指示器,然后在后台线程中获取数据,您只需要刷新您的视图/表格视图。这样,模态视图在呈现时不会出现 5 秒或延迟。

于 2011-06-27T16:44:31.037 回答