renderInContext - сбой выброса
Я рендеринг изображений из веб-просмотра. поэтому метод renderIncontext более 50 раз вызывает цикл for. после 20 или 30 раз мое приложение зависло из-за большего потребления памяти.
Я использовал этот код:
UIGraphicsBeginImageContext(CGSizeMake([w floatValue], [h floatValue]));
CGContextRef ctx = UIGraphicsGetCurrentContext();
[[UIColor blackColor] set];
CGContextFillRect(ctx, webview.frame);
[self.webview.layer renderInContext:ctx];
image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
После 20 раз он разбился. Мне нужны его решения.
Почему это происходит? Кто-нибудь знает?
1 ответ
Похоже, вы создаете много растровых изображений в узком цикле. Вам необходимо сохранить нужные изображения (возможно, на диске, а не в памяти, если они вам нужны) и разрешить автоматическое освобождение изображений в памяти. Оберните тело вашей петли в @autorelease
блок как:
for (whatever) {
@autorelease {
// Work that makes big autoreleased objects.
}
}
Таким образом, ваше потребление памяти не выйдет из-под контроля внутри цикла. Опять же, вы все равно будете выделять тонны памяти, если сохраните все эти объекты UIImage. Сохраните сгенерированные изображения во временный каталог (или другое удобное место) на диске и извлеките их по мере необходимости.