У меня есть задача «синхронизация», которая опирается на несколько «подзадач», которые включают в себя асинхронные сетевые операции, но все они требуют доступа к одной NSManagedObjectContext
. Из-за требований потоков NSManagedObjectContext
s мне нужно, чтобы каждая из этих подзадач выполнялась в одном потоке. Из-за объема обработки, выполняемой в некоторых из этих задач, мне нужно, чтобы они были в фоновом потоке.
В данный момент я запускаю новый поток, выполняя это в методе -init
моего единственного объекта SyncEngine
:
[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
для этой темы? Есть ли лучший способ сделать это? Цикл выполнения должен работать только с источниками «executeSelector», и он (и его поток) должен присутствовать в течение всего времени жизни процесса.
Когда дело доходит до настройки NSAutoreleasePool
, должен ли я сделать это с помощью Run Loop Observers для создания пула автоматического выпуска и опустошения его после каждого прогона?