私は多くのドキュメントに対処する必要のあるマルチスレッド動作とcore data
アプリケーション、に取り組んでいます複数のスレッドでのコアデータ操作、メモリリーク?
を解決しました。
これらのドキュメントの詳細を使用して、コアデータに挿入、削除、更新などを実行しています。
膨大な数のデータを処理しているので、スレッド操作ごとに別々のNSManagedObjectContext
を使用しています(mainThreadの主なコンテキストを維持する)。
私は便利なNSManagedObjectContext
管理のために、コンテキストをスレッド辞書に設定しました。
このメソッドを使用すると、重要なメモリが紛失することはありませんが、xcode計測器リークツールを実行すると、NSManagedObjectContext
に関連するリークオブジェクトの数が表示されます。
しかし、スレッド終了時にコンテキストが完全に削除されていることがわかりました(現在のスレッドは操作後に自身を強制終了するため、スレッド辞書も消去されています)。
大きなドキュメントを扱う一方で、それはメモリの問題原因managedObjectContext-(NSManagedObjectContext*)managedObjectContext {
NSManagedObjectContext *context = nil;
if ([NSThread isMainThread]) {
if (!managedObjectContext) {
context = [NSManagedObjectContext newContextForPersistentStoreCoordinator:[self persistentStoreCoordinator]];
[self setManagedObjectContext:context];
}
context = managedObjectContext;
}
else {
//find context for this thread.
NSMutableDictionary *threadDictionary = [[NSThread currentThread] threadDictionary];
context = [threadDictionary objectForKey:kManagedObjectContextKey];
if (!context) {
//create a new context for this thread.
context = [NSManagedObjectContext newContextForPersistentStoreCoordinator:[self persistentStoreCoordinator]];
[threadDictionary setObject:context forKey:kManagedObjectContextKey];
[context setUndoManager:nil];
//to start observing context through DidSaveNotification.
[self startObserveContext:context];
}
}
return context;
}
を取得するためのコードを与え、私がメイン/シングルのみ使用されたとき何のリークを示していない楽器が示しNSManagedObjectContext.But以下
ので、私はのために別々のNSManagedObjectContextを必要とします各スレッド操作
はいずれも、この問題のために良い解決策がどうなるか、を教えてもらえます?...複数のスレッドでコアデータコンテキストを処理するための 他の方法は...
をいただければ幸いですありがとうございます
アイデア@Marceloさんありがとうございます。問題は既にプロジェクトのほとんどすべてのモジュールが終了しているので、これをブロックに変更すると難しいと思います...?または投稿できますかあなたが使った方法? – Raj
あなたが与えたリンクを確認しました。彼らはgit hub MagicalRecord(http:// github。com/magicalpanda/magicalrecord)、同じこと(スレッド辞書のコンテキストを設定する)もあります – Raj