我想知道在 backgorund 和 detachNewThread 中执行选择器有什么区别
2 回答
它们是相同的。正如您在文档部分中看到的那样单击此处
performSelectorInBackground:withObject:调用这个方法的效果和调用NSThread的detachNewThreadSelector:toTarget:withObject:方法的效果是一样的,参数是当前对象、选择器和参数对象。
performSelectorInBackground:withObject:比 NSThread 更简单。
但是,NSThread 可以控制其优先级、堆栈大小等。如果您想自定义行为,我建议使用 NSThread 而不是 performSelectorInBackground:withObject:。
我会从语义的角度来看它。没有技术理由使用其中一种。
如果你真的“想”有一个“做某事”的线程,请使用 NSThread;特别是,如果您的线程运行某种形式的事件或消息循环,它可能是创建线程的最合适的方式。在这种情况下,“线程对象”实际上就是这样;在许多情况下,它不是具有实际应用程序数据的“应用程序领域”对象,因为这些数据将以某种方式移交给线程。
如果您的线程只是为了在后台运行某个单一操作,请使用基于 NSObject 的方法。您并不真正关心这是一个“线程”,您运行它的对象很可能是带有数据的“应用程序领域”对象;没有事件或消息循环来提供来自其他线程的命令。
因此,我会根据抽象因素做出决定,例如“在给定的上下文中看起来更好”。拥有一个 NSThread “感觉”就像是一个更独立的实体,它愿意为多个客户端提供服务,而 NSObject 方法感觉就像它与它运行的数据对象紧密相连,除非它是对事业至关重要。