У меня есть метод, который вызывается в цикле, который выглядит примерно так:
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
UIImageView *background = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, PAGE_WIDTH, PAGE_HEIGHT)];
background.image = backgroundImg;
for (UIView *view in viewArray)
{
[background addSubview:view];
}
UIGraphicsBeginImageContext(background.frame.size);
[background.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
for (UIView *view in background.subviews)
[view removeFromSuperview];
background.image = nil;
[background release];
[image retain];
[pool drain];
[image autorelease];
return image;
Однако, в соответствии с Instruments Memory Monitor, использование памяти увеличивается и увеличивается и никогда не снижается до конца цикла. (Вылетает.)
Если я заменю UIGraphicsBeginImageContext на UIGraphicsEndImageContext на
UIImage * image = someotherimage;
тогда память не скачет, а будет выделяться и уменьшаться на каждой итерации цикла, как я и ожидал, из-за пула автоматического выпуска. (Не падает)
И если я просто закомментирую строку renderInContext, она будет работать нормально. (Не вылетает)
Итак, похоже, что renderInContext каким-то образом удерживает изображение - как я могу заставить его выпустить его? Или любые альтернативные предложения, пожалуйста:)?