NSManagedObjectContext никогда не освобождается, вызванный вызовом executeFetchRequest с использованием NSMainQueueConcurrencyType - PullRequest
0 голосов
/ 15 марта 2019

Как уже отмечалось, я заметил, что когда я вызываю 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:

Во-первых, граф памяти enter image description here

_PFManagedObjectReferenceQueue не является проблемой, так как я знаю, как удалить его ссылку.

Далее приведен скриншот инструмента распределения.enter image description here

Итак, когда я вызываю executeFetchRequest, оказывается, что он вставляет дополнительное удержание, которое никогда не уравновешивается другим выпуском.

В общем, мой вопрос:Кто-нибудь знает, почему мой контекст чрезмерно сохраняется?И как я могу уговорить дугу подать недостающий релиз?

...