Проблема с утечкой памяти, кто-нибудь может объяснить, что это значит?

#iphone #objective-c #memory-leaks

#iPhone #objective-c #утечки памяти

Вопрос:

Я получаю утечку памяти в следующей строке кода: введите описание изображения здесь

Строка кода:

 NSArray *fetchedObjects = [qContext executeFetchRequest:fetchRequest error:amp;error];
  

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

Может кто-нибудь подсказать мне, где искать? …и правильно ли я понимаю «100%», что это указывает на то, что эта строка кода на 100% вызывает утечку?

Обновить

Еще немного кода:

 //=========PREPARE CORE DATA DB===========//
if (managedObjectContext == nil) { managedObjectContext = [(FamQuiz_R0_1AppDelegate *)
                                                           [[UIApplication sharedApplication] delegate] managedObjectContext]; }

// Define qContext
NSManagedObjectContext *qContext = [self managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription 
                               entityForName:@"questions" inManagedObjectContext:qContext];
[fetchRequest setEntity:entity];

NSArray *fetchedObjects = [qContext executeFetchRequest:fetchRequest error:amp;error];
for (NSManagedObject *info in fetchedObjects) {
if ([[info valueForKey:@"qDiff"] intValue] == 1) { 
        [allEasyArrayQ addObject:[info valueForKey:@"idQ"]];
    } else if ([[info valueForKey:@"qDiff"] intValue] == 2) { 
        [allMediumArrayQ addObject:[info valueForKey:@"idQ"]];
    } else if ([[info valueForKey:@"qDiff"] intValue] == 3) { 
        [allHardArrayQ addObject:[info valueForKey:@"idQ"]];
    }
}
  

Комментарии:

1. Можете ли вы показать, как вы создаете fetchrequest и предикат?

2. Также предоставьте подробную информацию об утечке, если можете.

3. Освобождается ли объект fetchRequest (он автоматически освобождается или- освобождается вручную после выполнения fetchRequest?

4. Выпущен запрос выборки

Ответ №1:

Вероятно, вы чрезмерно сохраняете массив или объекты внутри него позже в этом методе или даже за пределами этого метода. Строка будет указывать только, где создаются объекты, а не где выполняется фактическое дополнительное сохранение. Для этого вам нужно будет проверить с помощью инструментов, которые стеки вызовов сохраняют и освобождают пропущенные объекты.

Ответ №2:

Нет, 100% означает, что на эту утечку приходится 100% вашей утекшей памяти (т. Е. Это ваша единственная утечка).

Обратите внимание, если вы хотите устранить утечку, вы ищете не в том месте. Утечки сообщают вам, какой экземпляр является утечкой, это класс и это история управления памятью. Попробуйте учебник, подобный этомуhttp://www.cimgf.com/2008/04/02/cocoa-tutorial-fixing-memory-leaks-with-instruments /

Обратите внимание, что Утечки не могут указать вам строку, где происходит утечка, поскольку причиной вашей утечки является то, чего вы не сделали, в отличие от того, что вы сделали (т. Е. вы не выпустили свой объект).