代码之家  ›  专栏  ›  技术社区  ›  mahboudz

[nsthread detachnewthreadselector:]和-performselector背景之间的差异

  •  24
  • mahboudz  · 技术社区  · 15 年前

    我一直在使用 -performSelectorInBackground 在我的许多应用程序中,有点忘记了 -detachNewThreadSelector . 现在我想知道这两者之间有什么区别。它们是几乎可以互换的,还是存在差异和地方,其中一个优于另一个?谢谢!

    4 回复  |  直到 9 年前
        1
  •  31
  •   Michael Waterfall    15 年前

    它们是相同的。参见 documentation .

    执行选择器背景:带对象: 调用此方法的效果与使用当前对象、选择器和参数对象作为参数调用DetachNewThreadSelector:ToTarget:WithObject:NSThread的方法的效果相同。

        2
  •  5
  •   KatokichiSoft    15 年前

    正如迈克尔所说,它们是相同的。我想,用一根线 执行选择器背景:带对象: 更简单的方法,而不是简单的方法。

    但是,nsthread可以控制其优先级、stacksize等。如果您想自定义行为,我建议nsthread而不是 执行选择器背景:带对象: .

        3
  •  3
  •   Mr. Propa    14 年前

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

    - (void)uploadDataOnThread
    {
        NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    
        // do something here...
    
        [pool release];
    }
    
        4
  •  2
  •   Sangram Shivankar Wostein    9 年前

    有趣的是你们不能指出他们之间的区别-

    我会告诉你很多的。我们有一个iPhone应用程序在显示时锁定了“ 互联网活动 “顶部栏和窗口中的披露图标表示” 发送… “当我们向服务器发送音频文件时, performSelectorInBackground: 不工作。当我们交换出去的时候 performSelectorInBackground 具有 detachNewThreadSelector 它工作得很好,但现在它抱怨说没有 autoreleased 在该线程中运行的对象将由池释放。也许这是因为池在主线程中?