сообщение об освобождении, отправленное на освобожденный экземпляр, но указатель экземпляра не был равен nil - PullRequest
0 голосов
/ 14 октября 2011

Вот код в одном из моих методов, где imageRaw - это ивар:

if (imageRaw) 
    [imageRaw release]; // error occurs here
    .
    .
    .
if (anImage) 
    imageRaw = [[anImage scaleToFitWithin:maxImageSize interpolationQuality:kCGInterpolationHigh] retain];          

У меня иногда возникал такой тип ошибки, и я его не совсем понимаю.Единственный способ, которым он не равен nil, - это присвоение экземпляру подходящего класса, в данном случае UIImage.

Зомби включены.

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

1 Ответ

1 голос
/ 14 октября 2011

Я предполагаю, что здесь происходит то, что в какой-то момент вашего выполнения этот метод вызывается, когда у вас есть что-то, хранящееся в imageRaw, но нет ничего в anImage.В этом случае ваш объект в imageRaw будет освобожден, но ничего нового не будет сохранено в нем.Это оставляет адрес памяти для освобожденного объекта в imageRaw, но объект больше не существует.Затем, в следующий раз, когда вы запустите метод, он проверяет, не является ли imageRaw ненулевым (что и есть, поскольку он все еще хранит этот адрес памяти), пытается вызвать release в этой памяти и завершается неудачно.Чтобы избежать этого, вы можете установить imageRaw на ноль каждый раз, когда вызываете release для него:

if (imageRaw)
    [imageRaw release];
    imageRaw = nil;
    .
    .
    .
if (anImage)
    imageRaw = . . .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...