我在很多应用中都使用过-performSelectorInBackground
,对-detachNewThreadSelector
一无所知。现在我想知道两者之间的差异。它们几乎可以互换,还是存在一个优于另一个的差异和地方?谢谢!
答案 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
个对象不会被池释放..也许这是因为池是主线程吗?