Распределение памяти с помощью imageNamed

Я хочу отобразить некоторые изображения, когда изображение недоступно, я хочу показать изображение по умолчанию. При использовании функции анализа я получаю предупреждения о потенциальной утечке. Я понимаю, что при использовании imageNamed не выделяется память, что может быть хорошим решением? Смотрите ниже часть моего кода

if (!isMyFileThere){
    image = [UIImage imageNamed:@"default.png"];            
}
else{
    image = [[UIImage alloc] initWithContentsOfFile:pngFilePath];
}

3 ответа

Решение

Это автоматически выпущено

 image = [UIImage imageNamed:@"default.png"];

Это не

image = [[UIImage alloc] initWithContentsOfFile:pngFilePath];

Вам нужно сделать это:

image = [[[UIImage alloc] initWithContentsOfFile:pngFilePath] autorelease];

Правило таково, если имя вашего метода начинается с alloc, new, copy или же muteableCopy Вы владеете им и должны освободить его самостоятельно, либо с release или с autorelease, Все остальное не ваше, поэтому вы не должны выпускать его.

Если вы позвоните retain на объекте, вы должны release (или же autorelease) это столько же раз:)

Если вы хотите, чтобы объект оставался до тех пор, пока вы не отпустите его вручную, вы должны использовать retain, autorelease добавляет объект в текущий пул NSAutorelease, который очищается в конце каждой итерации цикла выполнения. если вы попытаетесь использовать освобожденный объект, ваша программа потерпит крах.

в iOS 5.0, если вы включите ARC, вам больше не нужно будет использовать "retain", "autorelease" или "release". они добавляются компилятором автоматически.

image = [[UIImage alloc] initWithContentsOfFile:pngFilePath]; Вы выполнили выделение, и теперь вы должны его освободить, что может привести к утечке. Другой оператор - объект с автоматическим освобождением.

Другие вопросы по тегам