繁体   English   中英

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

[英]iPhone SDK Background threads calling other methods

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

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

-(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]; 使新方法也可以在后台运行?

任何建议都将非常有帮助。 我对此有些困惑。

非常感谢,布雷特

它会留在后台,与它被调用的线程相同。

需要考虑的一些线程注意事项:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM