我有一个“同步”任务,它依赖于几个“子任务”,其中包括异步网络操作,但都需要访问单个NSManagedObjectContext
. 由于NSManagedObjectContext
s 的线程要求,我需要这些子任务中的每一个在同一个线程上执行。由于其中一些任务的处理量很大,我需要它们在后台线程上。
目前,我正在通过在我的单例SyncEngine
对象的-init
方法中执行此操作来启动一个新线程:
[self performSelectorInBackground:@selector(initializeSyncThread) withObject:nil];
该-initializeSyncThread
方法如下所示:
- (void)initializeSyncThread
{
self.syncThread = [NSThread currentThread];
self.managedObjectContext = [(MyAppDelegate *)[UIApplication sharedApplication].delegate createManagedObjectContext];
NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
[runLoop run];
}
NSRunLoop
这是为这个线程启动的正确方法吗?有更好的方法吗?运行循环只需要处理“performSelector”源,它(及其线程)应该在进程的生命周期内存在。
在设置NSAutoreleasePool
.