iPhone SDK后台线程调用其他方法

时间:2010-10-07 21:25:45

标签: iphone objective-c

我是一个看似简单的问题,我似乎无法找到答案(而且它阻碍了我的应用)。

我有一个运行特定方法的后台线程:

-(void)processImage:(UIImage *)image {

  NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

  //Process image here in the background here

  [pool drain];
}

这非常有用,但是当我想从已经背景的方法中调用另一个方法时,我的问题出现了。这个电话是否留在后台?我是否需要在新方法中添加NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];[pool drain];以使其在后台运行?

任何建议都会非常有帮助。我对此感到有点困惑。

非常感谢, 布雷特

2 个答案:

答案 0 :(得分:1)

它将保留在后台,与调用它的同一个线程。

要考虑的一些线程说明:

  • 可能不是很明显,但是如果你从后台线程调用一个定时器,并且线程在定时器应该关闭之前退出,则不会调用定时器。因此,建议您从主线程
  • 设置计时器
  • 除非你产生另一个线程,否则你不需要另一个自动释放池。
  • 任何UI更新都应在主线程上完成

答案 1 :(得分:0)

您不需要添加另一个自动释放池,您已经拥有的就足够了。是的,你所做的所有来自该线程的调用都保留在该线程中,因此也在“后台”运行。例外是使用“performSelectorOnMainThread:”,这当然使得给定的选择器在主线程上执行:-)如果你想调用GUI方法(比如在UIImageView上设置图像)你应该确保做所以在主线程上。请参阅“performSelectorOnMainThread:waitUntilDone:”的文档(很抱歉没有给你链接,我在iPad上输入了这个链接)。