UIImage imageNamed, давая EXC_BAD_ACCESS во второй раз - PullRequest
3 голосов
/ 19 февраля 2009

Я работаю над игрой с кучей мини-игр. Внутри одного игрового обзора у меня есть следующий код:

UIImage* img = [UIImage imageNamed:@"foo.png"];
someImage = CGImageRetain(img.CGImage);
[img release];

someImage имеет тип CGImageRef, и это не имеет проблем с первого раза. После того, как пользователь проигрывает мини-игру (или выходит из нее), игра и все, как кажется, удаляются должным образом. Затем, если они возвращаются в мини-игру, и игра снова создается, строка:

someImage = CGImageRetain(img.CGImage);

вызывает какую-то ошибку ... почти как мой объект UIImage уже выпущен. Я знаю, что есть некоторые особенности использования [UIImage imageNamed], но я не могу отследить это вообще. Любая помощь будет принята с благодарностью:)

1 Ответ

11 голосов
/ 19 февраля 2009

Эта строка - ваша проблема;

[img release];

В Какао существует общее соглашение, что если функция возвращает объект и не содержит слов copy или alloc, вам не нужно его освобождать.

Функции, которые возвращают объекты, обычно добавляют их в пул автоматического выпуска. Если вы планируете сохранить объект, вы должны сохранить его (и позже отпустить). Если нет, то он будет автоматически освобожден.

Если вы попытаетесь освободить один из этих объектов, это вызовет зло. В этом случае я подозреваю, что это освобождает ресурс, который, по мнению ОС, все еще принадлежит.

Этот поток содержит более подробную информацию об управлении памятью в Cocoa.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...