从后台运行的方法调用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/