Здесь:
NSString *fileName = [[NSString alloc] init];
for(DBMetadata *file in metadata.contents) {
fileName = [NSString stringWithFormat:@"%@", file.filename];
NSString
в первой строке перезаписывается новыми значениями в третьей строке. Исходное значение утечки.
Это означает, что:
}
[self createMetaListArray];
[fileName release];
Релиз в последней строке высвобождает не fileName
, который вы указали / инициализировали выше, а присваивание внутри цикла. Вы не распределяете / не копируете / не сохраняете это, поэтому вы не «ответственны» за его освобождение.
У вас есть подобное недоразумение во второй функции.
[filePathWithName stringByAppendingFormat:[fileNamesAtDirectory objectAtIndex:i]];
Это не меняет filePathWithName
. Возвращает новую строку.
Я предлагаю вам ознакомиться с правилами управления памятью Какао - вам не хватает некоторых основ. Понимание этого сделает вашу жизнь намного проще.