Вызов функции NSMutableArray ...? - PullRequest
0 голосов
/ 07 апреля 2011

возможно, кто-то может помочь мне выяснить, почему его код протекает ..

я вызываю функцию getNotes, которая возвращает авто-релиз NSMutableArray

    notesArray = [[noteManager getNotes:id] retain];

notesArray - свойство, объявленное в моемзаголовочный файл

@property (nonatomic, retain) NSMutableArray* notesArray;

это сокращенная версия функции getNotes

- (NSMutableArray*) getNotes:(NSString *)id {


    NSMutableArray* rArr = [[NSMutableArray alloc] init];

    for (NSString* sNote in noteArray) {
        myNote* note = (myNote*)[NSKeyedUnarchiver unarchiveObjectWithFile:sFile];
        [rArr addObject:note];

    }
    return [rArr autorelease];
}

the [rArr addObject: note];это 100% утечка .. почему?все они автоматически выпущены?

класс myNote просто класс с некоторыми свойствами, ничего особенного ...

Ответы [ 3 ]

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

Выпускается ли notesArray в какой-то момент?Вместо сохранения вручную вы можете использовать синтаксис точки:

self.notesArray = [noteManager getNotes:id];

вместо:

notesArray = [[noteManager getNotes:id] retain];
0 голосов
/ 07 апреля 2011
for (NSString* sNote in noteArray) {
        myNote* note = (myNote*)[NSKeyedUnarchiver unarchiveObjectWithFile:sFile];
        [rArr addObject:note];

    }

Здесь ваши заметки автоматически высвобождаются и не должны вызывать утечку памяти, но автозапуск происходит не сразу.Это может стать проблемой в длинных циклах.Вы должны использовать свой собственный пул автоматического выпуска, чтобы избежать таких ситуаций.Как это

for (NSString* sNote in noteArray) {
            NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
            myNote* note = (myNote*)[NSKeyedUnarchiver unarchiveObjectWithFile:sFile];
            [rArr addObject:note];
            [pool drain];    
        }
0 голосов
/ 07 апреля 2011

Возможно, у вас уже есть заметки, хранящиеся в notesArray, и они не освобождаются до повторной установки.

Попробуйте изменить это

notesArray = [[noteManager getNotes:id] retain];
//to
self.notesArray = [noteManager getNotes:id];
...