【发布时间】:2012-09-25 06:45:31
【问题描述】:
我无法理解在后台调用函数之间的区别
[self performSelectorInBackground:@selector(getFriendFaceBookList) withObject:nil];
并在线程中调用相同的函数:
[NSThread detachNewThreadSelector:@selector(getFriendFaceBookList) toTarget:self withObject:nil];
哪一种是在非 ARC 应用中工作的最佳方式。
谢谢
【问题讨论】:
-
不要使用其中任何一个。相反,将工作分派到一个全局队列(它将与主线程同时运行)。
-
感谢您的快速回复。如何使用全局队列?
-
不幸的是,我目前无法添加链接,希望另一张海报可以/愿意,但请查看文档中的并发编程指南和 Grand Central Dispatch 参考。它适用于 iOS 4.0+
-
@JasonCoco 为什么我们不应该使用这些?
-
@IlkerBaltaci 该注释更多是针对原始发布者的,但总的来说,由于您必须配置这些线程并支付与内核中生成线程相关的成本(在资源有限的设备上),它们不是在后台执行任务的最佳方式。如果您有一个需要自己的线程的长时间运行的任务,那么这些方法不会为您执行此操作。随着 GCD 的引入,没有真正的理由再使用它们了,如果你不得不问有什么区别,你应该改用 GCD。
标签: iphone ios background-process nsthread