美文网首页
ios内存优化

ios内存优化

作者: 会飞的猪X | 来源:发表于2022-03-23 17:58 被阅读0次

大图(GIF)引发的CPU内存暴涨

起因:
在app首页有一个小的广告弹框,点击就弹出大图
由于每次点击都会去请求最新的GIF图,链接不间断的点击,导致手机发热严重,直至APP闪退。

在调试中监测到执行此操作时,CPU和内存一直在暴涨,CPU利用率达到200% 300% 内存也一直暴涨
后面定位到具体代码发现二进制转换成UIImage对象时,CPU利用率和内存使用很高,如果一直重复执行,它们就一直涨,直至手机发热,闪退。

解决方案:
减少二进制转换UIImage,由原本每次点击去执行sd_animatedGIFWithData 或者 animatedImageWithGIFData 操作改为
用一个UIImage变量来缓存gif图片对象,减少大文件的转换成本。

使用方法:
SDWebImage框架、FLAnimatedImage
sd_animatedGIFWithData 方法
animatedImageWithGIFData  方法

@property (nonatomic, strong) UIImage *bigImageView;

 UIImageView * gifImageView = [[UIImageView alloc]init];
    if (self.bigImageView){
           gifImageView.image = self.bigImageView;
    }else{
            self.bigImageView = [UIImage sd_animatedGIFWithData:gifImageData];
           gifImageView.image = self.bigImageView;
    }

循环引用造成的CPU暴涨

- (instancetype)initWithFrame:(CGRect)frame{
    self = [super initWithFrame:frame];
    if (self){
        self = [[[NSBundle mainBundle]loadNibNamed:@"TGSpellGroupDetailNavView" owner:self options:nil]lastObject];
    }
    [self up];
    return self;
}

- (void)up{
    [UIView animateWithDuration:0.6 animations:^{
        self.shareButton.imageView.frame = CGRectMake(8, 4, 15, 13);
    }];
    [UIView animateWithDuration:0.6 delay:0.6 options:UIViewAnimationOptionCurveEaseInOut animations:^{
        self.shareButton.imageView.frame = CGRectMake(8, 12, 15, 13);
    } completion:^(BOOL finished) {
        [self up];
    }];
}

此功能是一个分享图标上下浮动的效果,由于存在循环调用,强强引用导致内存无法释放。造成了cpu的占用,导致UI卡顿。

修改为弱引用之后问题解决

__weak typeof (self) weakself = self;
- (void)up{
    [UIView animateWithDuration:0.6 animations:^{
        weakself.shareButton.imageView.frame = CGRectMake(8, 4, 15, 13);
    }];
    [UIView animateWithDuration:0.6 delay:0.6 options:UIViewAnimationOptionCurveEaseInOut animations:^{
        weakself.shareButton.imageView.frame = CGRectMake(8, 12, 15, 13);
    } completion:^(BOOL finished) {
        [weakself up];
    }];
}

相关文章

  • iOS 性能优化内存优化学习

    iOS APP渲染性能优化iOS性能优化之内存(memory)优化iOS内存和性能优化

  • iOS APP内存优化记录

    iOS APP内存优化记录iOS APP内存优化记录

  • iOS 性能优化 - Allocations分析内存分配

    iOS 性能优化 - Allocations分析内存分配 iOS 性能优化 - Allocations分析内存分配

  • iOS必读 - 收藏集 - 掘金

    iOS 性能优化总结 - iOS - 掘金关于iOS 性能优化梳理: 基本工具、业务优化、内存优化、卡顿优化、布局...

  • IOS的性能优化包括哪几点

    iOS性能优化总结 iOS性能优化总结。关于 iOS 性能优化梳理: 基本工具、业务优化、内存优化、卡顿优化、布局...

  • iOS性能优化

    iOS-Performance-Optimization 关于iOS 性能优化梳理: 基本工具、业务优化、内存优化...

  • iOS性能优化

    iOS-Performance-Optimization 关于iOS 性能优化梳理: 基本工具、业务优化、内存优化...

  • iOS 性能优化

    25个性能优化 iOS内存和性能优化

  • iOS性能调优

    1.iOS 性能调优2.iOS性能调优(全)---内存优化和UI优化3.深度优化iOS网络模块4.iOS网络请求优...

  • iOS APP内存优化技术

    iOS内存优化的技术介绍有很多,但总体浏览下来,感觉还是苹果官方的技术最有价值, iOS app内存优化的官方技术...

网友评论

      本文标题:ios内存优化

      本文链接:https://www.haomeiwen.com/subject/wflidrtx.html