非同期ネットワーク操作を含むいくつかの「サブタスク」に依存する「同期」タスクがありますが、これらはすべて単一のにアクセスする必要がありますNSManagedObjectContext
。sのスレッド要件によりNSManagedObjectContext
、これらのサブタスクをすべて同じスレッドで実行する必要があります。これらのタスクのいくつかで実行される処理の量のために、私はそれらがバックグラウンドスレッド上にある必要があります。
現時点では、シングルトン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
、Run Loop Observersを使用して自動解放プールを作成し、実行するたびにそれを排出することでこれを行う必要がありますか?