【问题标题】:Difference between calling a function in background and using calling a function in thread在后台调用函数和在线程中调用函数的区别
【发布时间】: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


【解决方案1】:

它们是相同的。见Documentation

performSelectorInBackground:withObject: 调用这个方法的效果和调用NSThread的detachNewThreadSelector:toTarget:withObject:方法的效果一样,参数是当前对象、选择器和参数对象。

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    • 2011-10-24
    • 2012-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    相关资源
    最近更新 更多