[NSThread detachNewThreadSelector:]和-performSelectorInBackground之间的区别

时间:2010-01-19 09:46:41

标签: iphone cocoa-touch

我在很多应用中都使用过-performSelectorInBackground,对-detachNewThreadSelector一无所知。现在我想知道两者之间的差异。它们几乎可以互换,还是存在一个优于另一个的差异和地方?谢谢!

4 个答案:

答案 0 :(得分:31)

他们是完全相同的。请参阅documentation

<强> performSelectorInBackground:withObject: 调用此方法的效果与调用detachNewThreadSelector:toTarget:withObject:NSThread的方法(当前对象,选择器和参数对象作为参数)相同。

答案 1 :(得分:5)

迈克尔说,他们是完全相同的。我认为,使用 performSelectorInBackground:withObject:的线程比NSThread更容易。

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

答案 2 :(得分:3)

Corey,如果你在一个新线程上运行并且你正在使用[object autorelease],你需要创建自己的自动释放池。相当简单:

- (void)uploadDataOnThread
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    // do something here...

    [pool release];
}

答案 3 :(得分:2)

有趣的是你们不能指出它们之间的任何差异 -

我会告诉你这么多。当我们在顶部栏中显示“互联网活动”披露图标时,我们有一个锁定的iPhone应用程序,并且我们在显示“发送... ”的窗口将音频文件发送到服务器并且performSelectorInBackground:无效。当我们用performSelectorInBackground换出detachNewThreadSelector时,它运行正常,但现在它抱怨在该线程中运行的autoreleased个对象不会被池释放..也许这是因为池是主线程吗?