распределение памяти с помощью imageNamed - PullRequest
0 голосов
/ 24 августа 2011

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

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

Ответы [ 3 ]

3 голосов
/ 24 августа 2011

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

 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) его столько же раз:)

0 голосов
/ 24 августа 2011

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

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

0 голосов
/ 24 августа 2011

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

...