Мне трудно понять, почему у вашей переменной "picture" есть выделение init. Я согласен с более ранними ответами использовать autorelease, но, возможно, что-то вроде:
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
UIImage *payload = [UIImage imageWithData:self.activeDownload];
UIImage *picture = nil;
if (payload.size.width != kAppIconHeight && payload.size.height != kAppIconHeight)
{
CGSize itemSize = CGSizeMake(kAppIconHeight, kAppIconHeight);
UIGraphicsBeginImageContext(itemSize);
CGRect imageRect = CGRectMake(0.0, 0.0, itemSize.width, itemSize.height);
[payload drawInRect:imageRect];
picture = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}
else
{
picture = payload;
}
self.activeDownload = nil;
self.imageConnection = nil;
[delegate ThumbDidLoad:self.indexPathInTableView Image:picture];
}
Пара изменений выше:
1. UIImage *payload = [UIImage imageWithData:self.activeDownload];
. Изменено это назначение для объекта с автоматическим освобождением, поскольку ему может быть назначено изображение Обратите внимание, что предложение if
назначает picture
объекту с автоматическим освобождением, поэтому предложение else
также должно применяться, и теперь оно выполняется, поскольку полезная нагрузка теперь является объектом с автоматическим освобождением.
2. UIImage *picture = nil;
вместо UIImage *picture = [[UIImage alloc] init];
. Я сделал это, так как назначение изображения НИКОГДА не используется, поэтому nil действительно действителен, поскольку он определенно будет назначен либо в предложении if
, либо else
.
3. Нет необходимости в [payload release]
теперь, когда payload
автоматически выпущен.