Как уже отмечалось, я заметил, что когда я вызываю executeFetchRequest для NSManagedObjectContext, который был инициализирован с NSMainQueueConcurrencyType, контекст никогда не освобождается.
Пример кода:
NSManagedObjectContext *context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
wcontext = context;
context.persistentStoreCoordinator = coordinator; //NSPersistentStoreCoordinator
NSFetchRequest *request = [MyModelEntity fetchRequest];
/* fill in fetch request filter and sort values*/
[context performBlockAndWait:^{
NSError *err = nil;
NSArray *results = [context executeFetchRequest:request error:&err];
}];
В отличие от этого,если я инициализирую контекст с помощью NSPrivateQueueConcurrencyType, тогда он будет освобожден, как и ожидалось.
Для дополнительного контекста, вот несколько скриншотов из некоторых инструментов отладки xcode:
Во-первых, граф памяти
_PFManagedObjectReferenceQueue не является проблемой, так как я знаю, как удалить его ссылку.
Далее приведен скриншот инструмента распределения.
Итак, когда я вызываю executeFetchRequest, оказывается, что он вставляет дополнительное удержание, которое никогда не уравновешивается другим выпуском.
В общем, мой вопрос:Кто-нибудь знает, почему мой контекст чрезмерно сохраняется?И как я могу уговорить дугу подать недостающий релиз?