我很困惑在iOS中使用哪种多线程工具来点击服务和根据服务数据更改UI,
显然对哪个工具使用位置感到困惑?
答案 0 :(得分:2)
NSURLConnection
是从远程服务器接收数据的“老派”方式。在单个类中使用少量NSURLConnection实例(UIViewController
或不可用)并不是很舒服。现在最好将sendAsynchronousRequest..
方法与完成处理程序一起使用。您还可以定义将运行完成处理程序的操作队列(主要用于UI或其他操作队列)。initWithContentsOfURL:
方法获取远程资源。您还可以控制哪些类型的队列将接收您的块(并发,串行等)performSelectorInBackground:
也是在后台线程中执行方法的“老派”方式。如果您不使用ARC,则需要设置单独的自动释放池以避免内存泄漏。它还具有不允许向给定选择器接受任意数量的参数的限制。在这种情况下,建议使用dispatch_async
。还有NSOperationQueue
NSOperation
及其子类(NSInvocationOperation
& NSBlockOperation
),您可以在后台运行任务以及获取主要通知完成任务的线程。恕我直言他们比GCD更灵活,你可以创建自己的操作子类,并定义它们之间的依赖关系。
答案 1 :(得分:1)
最重要的是,除了主线程之外,你永远不会在另一个线程中更改UI。
我认为,您提到的所有要点在后台使用相同的技术: GDC 。但我不确定。
无论如何,在线程方面你应该使用哪种工具无关紧要
这是你的目的的问题。如果您不想获取小图片或仅提取少量数据,则可以在contentsOfURL
或GDC调度块中使用performSelectorInBackground()
。
如果它是关于更多数据和更多信息,如进度或错误处理,你应该坚持使用* NSURLConnection`。
答案 2 :(得分:0)
我建议在所有情况下使用GCD。其他技术仍然存在,但主要是为了向后兼容。
GCD最好有3个原因(至少):