Я смотрю видео WWDC 2010, посвященное расширенному анализу памяти (сессия 311):
Примерно в 45:00 инженер по производительности обсуждает, что делать с «резидентной грязной памятью», которую ваше приложение загрузило в ОЗУ. Инженер предполагает, что в ответ на предупреждения памяти ваше приложение должно очищать это. Инженер вставляет метод "flush" своего пользовательского класса в didReceiveMemoryWarning
, и все в порядке, но код на самом деле не предлагает никаких примеров того, КАК освобождается память.
У меня есть вопрос: как очистить большие куски грязной памяти, используемые "Image IO"?:
Вот около 74 МБ памяти, которые просто лежат грязными (уже почти 6 минут), ожидая, пока кто-нибудь вернет их в iOS6. С ним ничего не происходит. Так как оно не проходит само по себе, мне нужно знать, как вернуть его на iOS.
Эти блоки, по-видимому, происходят из кода, подобного этому, и (возможно, других операций, связанных с изображением).
UIImage *screenshot = nil;
@autoreleasepool {
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)])
UIGraphicsBeginImageContextWithOptions(iPhoneRetinaIconSize, NO, [UIScreen mainScreen].scale);
else
UIGraphicsBeginImageContext(iPhoneRetinaIconSize);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
screenshot = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}
Проблема в том, что есть много памяти, загруженной в ОЗУ, которую нельзя вернуть в операционную систему, пока приложение не выйдет из строя.
Для грязной памяти, связанной с веб-просмотром, я обнаружил, что это может работать:
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
[[NSURLCache sharedURLCache] removeAllCachedResponses];
[[NSURLCache sharedURLCache] setDiskCapacity:0];
[[NSURLCache sharedURLCache] setMemoryCapacity:0];
// Dispose of any resources that can be recreated.
}
Есть ли эквивалент для UIImage, CALayer или UIGraphics?
imageNamed
, поэтому вы должны обязательно использовать этот вариант при загрузке из вашего пакета. - person Hot Licks   schedule 03.04.2013