我正在开发一个应用程序,该应用程序必须从服务器为用户提取新消息。我已将其实现为每 2 秒触发一次的计时器,并调用一个选择器,该选择器是一种实现 HTTP 请求和服务器响应处理的方法。所以我认为在主线程中执行此操作是一个非常糟糕的主意。
我没有在iOS中进行多线程处理的经验。所以我想知道什么适合并行化这个任务:GCD 还是 NSThread?
在 API 堆栈中工作。这样,您就可以专注于编程功能,而不是管理线程。GCD 使用系统已经启动的线程,它比管理自己的代码效率高得多。更好的目标是将您的网络封装到NSOperation
中,然后可以放在NSOperationQueue
上,这些将在一个或多个后台线程上执行,无论系统认为对于当前电源状态和其他类似的事情来说都是一个好数字。
与纯 GCD 方法相比,NSOperation
的好处是可以取消操作。一旦一个区块被提交到 GCD,它无论如何都必须运行。
如果你想用NSOperation
封装你的HTTP请求,你可能有兴趣知道有人已经为你做了这件事。 AFNetworking
是最受推崇的iOS网络堆栈之一,使用NSOperation
作为其基础进行构建,因此很容易多线程。
一个好主意是尝试将解析代码封装到NSOperation
中,然后随着网络请求操作的返回,您可以创建解析操作实例,并将它们放在另一个队列中,以便在后台进行处理。