Очевидные утечки: png_malloc
У меня есть приложение с различными анимациями и изображениями. Приложение работает отлично в течение примерно 30 минут, но затем сбой. Я просмотрел инструменты, и я замечаю, что существует целая куча распределений png_malloc
размером png_malloc
каждый раз, когда я отмечаю кучу (составляющую около 300 КБ каждые пару минут).
Я заметил в своих утечках, что каждый раз, когда анимация или png
используется в первый раз, кажется, что есть «утечка» данных (хотя я немного скептически отношусь к тому, является ли это настоящей утечкой или нет).
Все эти изображения были объявлены с использованием
- Jenkins и Xcode 8: Не удалось скопировать файлы PNG
- IOS: анимация для .png
- Ошибка загрузки png из .bundle в Objective-c
- Когда использовать PNG или JPG в разработке iPhone?
- Почему изображения PNG больше в комплекте приложений iOS, чем в моем проекте?
frameName = [[NSString alloc] initWithFormat:@"image.png"]; UIImage * u = [UIImage cachelessImageNamed:frameName];
поэтому я не верю, что возникла проблема с кэшированием изображений.
У кого-то еще была такая же проблема с этим распределением png_malloc
?
Снимок экрана инструментов
* Примечания: Я использую дугу, и анимации становятся nil
в функции освобождения; однако они не вызываются до выхода приложения. Это создает проблему при каждом запуске анимации, если она была создана только один раз?
EDIT Еще один код:
-(void) createSymbolAnimations { if (symbolAnimations == nil) { symbolAnimations = [[NSMutableArray alloc]init]; } NSString * frameName; if (thisAnimation == nil) { thisAnimation = [[NSMutableArray alloc] init]; } for (int x= 0; x< 40; x++) { frameName = [[NSString alloc] initWithFormat:@"image%d%s",x,".png"]; UIImage * u = [UIImage cachelessImageNamed:frameName]; [thisAnimation addObject:u]; } [symbolAnimations addObject:thisAnimation]; }
Является созданием анимации. Представьте, что у меня есть несколько из них, а затем я изменяю набор анимаций и начинаю анимацию прикосновением к этому фрагменту:
UIImageView * aView = [frameArray objectAtIndex:x]; aView.image = [[symbolAnimations objectAtIndex:x]objectAtIndex:0]; [aView startAnimating];
Где x
– набор изображений, которые я хочу оживить, а 0
– первый кадр анимации.
Таким образом, изображение изменяется несколько раз, и я начинаю волноваться, что каждый раз, когда изображения анимации меняются, ОЗУ не очищается, а вместо этого переписывается / перезаписывается.
EDIT Image grabber
+(UIImage *) cachelessImageNamed: (NSString *) name { return [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:name ofType:nil]]; }
- изменение альфа-анимации
- Изображение .png отображается как синие круги в iOS
- Можете ли вы сохранить PNG в библиотеке фотографий в iOS5?
- Сжатие файла NSKeyedArchiver, включающего UIImageView с загруженным изображением
- Ошибка декодирования URL-адреса IOS10 WkWebView
- Как закодировать эмиссию или зеркальную информацию в альфах открытой текстуры gl
- UIImageView не показывает прозрачность PNG-изображений от UIImagePickerController
- Какой самый оптимальный внутренний формат PNG для iOS-дисплея можно создать на платформе, отличной от Apple?
На всякий случай кто-то наткнется на это позже, я нашел проблему.
Png, используемые в этом проекте для анимаций, были созданы в Windows (не знаю, насколько это уместно), и кажется, что формат файла немного отличается от того, что ожидает XCode. Это запрещает освобождение любого png. Если вы конвертируете формат в png для Mac, он работает нормально. Я сделал это через
mogrify -type truecolormatte -format png *.png
После настройки всех моих изображений, утечки были значительно уменьшены, и все, кажется, работает нормально.