performSelectorInBackground

performSelectorInBackground

从后台运行的方法调用performSelectorInBackground:...的实际效果是什么?我希望它异步运行

例如:

- (void) _imageBufferWasUpdated{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    //do something here

    if(shouldContinue){
        [self performSelectorInBackground:@selector(_loop) withObject:nil];
    }
    [pool release];
}

_imageBufferWasUpdated将在后台运行,我想异步调用_loop方法(在后台也要使_imageBufferWasUpdated很快完成,可能在_loop结束之前)。

这样对吗?

有没有更有效(且相对简单)的方法来使用GCD进行此操作?如果您能举一些如何使用GCD进行 fork 的示例,我将不胜感激。我认为我至少需要3个线程,主线程,用于运行_imageBufferWasUpdated的后台线程,以及用于_loop的其他后台线程。我对么?

提前致谢
伊格纳西奥

最佳答案

你在做什么对我来说似乎很好。 cocoa 可能只使用一个后台线程,因此它不应导致过多的线程创建。

如果需要更多控制,可以使用NSOperation或GCD。两者都很简单。例如,GCD会像这样

#import <dispatch/dispatch.h>

...

dispatch_async( dispatch_get_global_queue(0,0), ^{
    [self _loop];
}];

关于multithreading - 调用performSelectorInBackground : from background thread,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4422561/

10-10 00:57