ПОСТАНОВИЛИ
Я работаю над приложением core data
с многопоточностью, в котором мне нужно иметь дело со многими документами.
Я выполняю вставку, удаление, обновление и т. Д. В основных данных, используя эти данные документа.
Поскольку мы имеем дело с огромным количеством данных, я использую отдельный NSManagedObjectContext
для каждой операции потока (сохраняя основной контекст для mainThread).
Для удобного управления NSManagedObjectContext
я установил контекст в словарь тем.
У меня нет какой-либо критической потери памяти при использовании этого метода, но когда я запускаю инструмент утечки инструмента xcode, он показывает количество утекших объектов, связанных с NSManagedObjectContext
.
Но я обнаружил, что контекст полностью удаляется при выходе из потока (поскольку текущий поток убивает себя после своей работы, словарь потока также очищается).
Ниже приведен код для получения управляемогоObjectContext
-(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. Но это вызывает проблемы с памятью при работе с большими документами, поэтому мне нужен отдельный NSManagedObjectContext для каждой операции потока
Может кто-нибудь сказать мне, что будет хорошим решением для этой проблемы? ...
Любой другой метод для обработки основного контекста данных в нескольких потоках будет приветствоваться ..
Спасибо