0

我正在开发的应用程序在首次启动时会获取一堆不同的新闻源并更新任何过期的新闻源。发生这种情况时,界面通常会冻结,您无法单击任何内容。实际的网络调用是在单独的线程上完成的,但数据库操作是在主线程上完成的。这会导致界面冻结吗?

有人告诉我,我需要做到一次只将两个要更新的提要插入到网络操作队列中,这样它就不会一次尝试所有这些提要,但它已经设置为只做这么多网络通话一次。我不明白如果它们只是按顺序放入队列中,那么一次队列中的东西会如何导致它运行得更快。如果我错了,请纠正我,我对此还是很陌生。

任何关于什么可能导致 UI 在启动过程中冻结的帮助将不胜感激!

4

1 回答 1

1

将耗时的操作从主线程移开总是一个好主意。

幸运的是,它在 iOS 上非常简单。如果耗时的任务相当简单,您可以考虑使用performSelectorInBackground

例如:

 [self performSelectorInBackground:@selector(myFunction:)
    withObject:myParam];

然而重要的是要记住,你不能从后台线程访问 GUI。要将对象返回到主线程,请使用performSelectorOnMainThread

例如:

 [self performSelectorOnMainThread:@selector(myFunction:) myParamwaitUntilDone:YES];

尝试将此策略应用于您的数据库调用。根据您的情况,您可能希望在NSOperation找到冻结原因时将其包装在 a 中或使用 Thread 。

于 2013-09-04T20:39:19.120 回答