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