后台执行选择器与分离线程之间的区别

时间:2012-08-18 09:31:18

标签: iphone

我想知道后台执行选择器和分离线程

之间有什么区别

2 个答案:

答案 0 :(得分:2)

他们是完全相同的。正如您在文档部分Click Here

中看到的那样

performSelectorInBackground:withObject:调用此方法的效果与使用当前对象,选择器调用NSThread的 detachNewThreadSelector:toTarget:withObject:方法的效果相同,以及参数对象作为参数。

performSelectorInBackground:withObject:比NSThread更简单。

但是,NSThread可以控制其优先级,stacksize等。如果你想自定义行为,我建议使用NSThread而不是performSelectorInBackground:withObject:。

答案 1 :(得分:0)

我会从语义的角度来看待它。没有技术理由可以使用其中一种。

如果你真的“想”拥有“做某事”的主题,请使用NSThread;特别是,如果您的线程运行某种形式的事件或消息循环,它可能是创建线程最合适的方式。在这种情况下,“线程对象”就是这样;在许多情况下,它不是具有实际应用程序数据的“应用程序域”对象,因为它们将以某种方式移交给线程。

如果您的线程仅用于在后台运行某些操作,请使用基于NSObject的方法。你并不真正关心这是一个“线程”,你运行它的对象很可能是带有数据的“应用领域”对象;没有event-或messageloop从其他线程提供命令。

因此,我将决定基于抽象因素,如“在给定的上下文中看起来更好”。让NSThread“感觉”像是一个愿意为多个客户端提供服务的更加独立的实体,而NSObject方法感觉它与它运行的数据对象紧密相连,除非它是真的,否则它并不真正处理其他任何事情。对事业至关重要。