Это должно быть очень просто, но я не вижу проблемы.Программа аварийно завершает работу при выполнении следующего блока кода.Анализатор сообщает о возможной утечке памяти:
if (anImage) {
eventImageView.frame = defaultEventImageFrame;
UIImage *scaledImage = [anImage scaleToFitWithin:defaultEventImageFrame.size interpolationQuality:kCGInterpolationHigh];
eventImageView.backgroundColor = [UIColor colorWithPatternImage:scaledImage];
}
Сообщение - [UIImage release]: сообщение отправлено освобожденному экземпляру 0x1129d920 *
Экземпляр 0x1129d920 является scaledImage
Я попытался добавить сохранения и выпуски, как это
if (anImage) {
eventImageView.frame = defaultEventImageFrame;
UIImage *scaledImage = [[anImage scaleToFitWithin:defaultEventImageFrame.size interpolationQuality:kCGInterpolationHigh] retain];
eventImageView.backgroundColor = [UIColor colorWithPatternImage:scaledImage];
[scaledImage release];
}
, и все еще получаю сообщение об ошибке.
Поэтому я попытался заменить назначение на копиювот так
if (anImage) {
eventImageView.frame = defaultEventImageFrame;
UIImage *scaledImage = [anImage copy];
eventImageView.backgroundColor = [UIColor colorWithPatternImage:scaledImage];
}
И проблема исчезла.
Проверяя метод scaleToFitWithin, я вижу, что он возвращает автоматически выпущенный объект:
- (UIImage *) scaleToFitWithin:(CGSize) newSize
interpolationQuality:(CGInterpolationQuality)quality{
CGSize originalImageSize = self.size;
CGSize newImageSize;
if (originalImageSize.width <= originalImageSize.height) {
newImageSize.width = self.size.width * newSize.width / self.size.width;
newImageSize.height = self.size.height * newSize.width / self.size.width;
}
else {
newImageSize.width = self.size.width * newSize.height / self.size.height;
newImageSize.height = self.size.height * newSize.height / self.size.height;
}
return [[[self normalize] resizedImage:newImageSize interpolationQuality:kCGInterpolationHigh] autorelease];
}
Итак, есть что-топро управление памятью, которое я не понимаю.Какая проблема может быть?