Проблема утечки памяти, кто-нибудь может объяснить, что это значит? - PullRequest
0 голосов
/ 27 апреля 2011

Я получаю утечку памяти в следующей строке кода: enter image description here

Строка кода:

NSArray *fetchedObjects = [qContext executeFetchRequest:fetchRequest error:&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:&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"]];
    }
}

Ответы [ 2 ]

0 голосов
/ 27 апреля 2011

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

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

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

0 голосов
/ 27 апреля 2011

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

...