CocoaTouch中的线程池?

时间:2009-10-27 16:30:43

标签: iphone objective-c multithreading

我有一组重复完成的任务,而不是每次需要执行这个用户调用的任务时创建一个新线程,我想使用一个线程池。

在创建新线程的典型流程中,每次调用线程入口点时都必须设置自动释放池。根据{{​​3}},似乎这个操作的性能可能微不足道,但我想要做的是避免在我的应用程序执行期间设置和拆除大量这些线程相关的成本。在其他框架/语言中,我刚刚检索了一个空闲线程并让它完成工作。完成工作后,线程将返回池中。

我没有看到iPhone SDK中的任何线程池对象只是NSThread。有什么好办法呢?

我如何设置我的主题:

// create thread using supplied entry point
[NSThread detachNewThreadSelector:@selector(myMethod) 
        toTarget:self 
        withObject:nil];

// thread entry-point
- (void)myMethod {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    *** code that should be run in the new thread goes here ***

    [pool release];
}

3 个答案:

答案 0 :(得分:4)

你想要解决这个问题的方法是使用一个NSOperationQueue,它将保存一个任务队列并按照你的意愿并行执行(可配置),每个都在后台线程上执行。我假设实现在给定操作完成后重新使用线程。

你将NSOperationQueue与NSOperations结合使用 - 你可以在那里进行同步调用(因为工作都是在后台线程上完成的),或者你仍然可以用更多的工作来进行异步调用(还需要定义更多的工作)方法)。

这是您可能会发现使用的tutorial

答案 1 :(得分:0)

我建议您根据需要使用NSOperationQueue。您可以设置队列的线程数。

答案 2 :(得分:0)

我认为其他答案在NSOperationQueue上有所体现,但为了完整起见,您应该了解这些项目:

  • PLBlocks(iPhone上的块的编译器+运行时支持)
  • WiganWallgate(在iPhone上实施大中央调度)