他们似乎执行了一个相当类似的任务:启动一个快速轻松地执行该选择器的新线程。但是有什么不同吗?也许关于内存管理?
答案 0 :(得分:4)
两者都是相同的。
在iOS和Mac OS X v10.5及更高版本中,所有对象都能够生成新线程并使用它来执行其中一种方法。 performSelectorInBackground:withObject:方法创建一个新的分离线程,并使用指定的方法作为新线程的入口点。例如,如果你有一个对象(由变量myObj表示)并且该对象有一个你想在后台线程中运行的doSomething方法,你可以使用以下代码来做到这一点:
[myObj performSelectorInBackground:@selector(doSomething) withObject:nil];
调用此方法的效果与调用detachNewThreadSelector:toTarget:withObject:NSThread的方法(当前对象,选择器和参数对象作为参数)相同。使用默认配置立即生成新线程并开始运行。在选择器内部,您必须像处理任何线程一样配置线程。例如,如果您计划使用它,则需要设置自动释放池(如果您没有使用垃圾收集)并配置线程的运行循环。有关如何配置新线程的信息
答案 1 :(得分:0)
我认为它们是相同的,因为在- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg;
类别的NSThread.h中定义了NSObject (NSThreadPerformAdditions)
。这没什么结论,但这是朝这个方向的证据。