HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – 表观泄漏:png_malloc大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个应用程序与各种动画和图像.该应用程序运行良好约30分钟,但随后崩溃.我查看了这些仪器,并注意到每次标记堆时都会产生大量的7kB png_malloc分配(每隔几分钟就会达到大约300kB).

我在泄漏中注意到,每次动画或png第一次使用时,数据似乎都会“泄漏”(尽管我有点怀疑这是否是真正的泄漏).

所有这些图像都已声明使用

framename = [[NSString alloc] initWithFormat:@"image.png"];
UIImage * u = [UIImage cacHelessImagenamed:framename];

所以我不相信缓存图像应该有问题.

有没有其他人对此png_malloc分配有同样的问题?

The instruments screenshot

*注意:我正在使用arc,并且在释放函数中动画被设置为nil;但是,在应用程序退出之前不会调用它们.如果只创建一次动画,每次运行动画时是否会产生问题?

编辑更多代码

-(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是动画的第一帧.

所以图像改变了很多次,我开始担心每次动画图像改变时,RAM都不会被清除,而是被重写/重写.

编辑图像采集卡

+(UIImage *) cacHelessImagenamed: (NSString *) name
{
    return [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForresource:name ofType:nil]];
}

解决方法

为了防止以后有人发现这个问题,我发现了问题.

在这项目中用于动画的png是在Windows中创建的(不确定它是多么相关),似乎文件格式与XCode期望的png略有不同.这不允许任何png被释放.如果您将格式转换为Mac的png,它似乎工作正常.我做到了这一点

@H_292_11@mogrify -type truecolormatte -format png *.png

调整完所有图像后,泄漏率大大降低,一切似乎运行良好.

大佬总结

以上是大佬教程为你收集整理的ios – 表观泄漏:png_malloc全部内容,希望文章能够帮你解决ios – 表观泄漏:png_malloc所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。