Проблема в том, что это:
imagePath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@" %@.png", photoName]];
присваивает imagePath
автоматически выпущенному объекту. Это означает, что он будет выпущен как часть NSAutoreleasePool
утечки, которая происходит в конце цикла цикла событий.
Поскольку вы не создаете память , но хотите, чтобы она зависла вокруг , вам необходимо retain
it:
[imagePath retain];
Вам необходимо определить, когда этот фрагмент сохраненной памяти может быть освобожден . Поскольку мы не знаем точно, как работает ваше приложение, решение остается за вами. Если вы вызываете этот метод более одного раза, вы, вероятно, захотите выпустить его так:
if (imagePath) {
[imagePath release];
}
imagePath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@" %@.png", photoName]];
[imagePath retain];
Если этот объект должен выжить только до тех пор, пока ваш контроллер выбора, вы должны освободить его методом dealloc
:
- (void)dealloc {
[imagePath release];
// Other releases
[super dealloc];
}
В противном случае, если это сохранится в течение всего срока службы вашего приложения, не беспокойтесь о выпуске его в dealloc
. (Но вы все равно должны освободить его до назначения, если вы назначаете его более одного раза.) Память будет возвращена ОС после завершения работы приложения.