陪玩系统开发,CPU引起的卡顿如何优化?

陪玩系统开发,CPU引起的卡顿如何优化?

一、尽量用轻量级的对象

1、比如用不到事件处理的地方,可以考虑使用CALayer取代UIView
2、还有能用基本数据类型就不用对象类型等等

二、不要频繁地调用UIView的相关属性

1、比如frame、bounds、transform等属性,尽量减少不必要的修改
2、尽量提前计算好布局,在有需要时一次性调整对应的属性,不要多次修改属性
3、尽量减少使用Autolayout,Autolayout会比直接设置frame消耗更多的CPU资源
4、其他需要设置的属性最后是能确定时再赋值,不要多次更改

三、图片的size最好刚好跟UIImageView的size保持一致

如果图片本身的大小和我们给予的大小有出入,CPU会去进行伸缩的处理,也是会消耗资源

四、控制一下线程的最大并发数量

1、不要过多的创建线程,线程的创建和消耗也是会消耗资源的
2、尽量保持较少数量的线程,设置好最大并发数
3、如果需要长期开启线程来执行任务,可以考虑让线程常驻,并再不需要后再进行统一销毁

五、尽量把耗时的操作放到子线程

1、比如对文本的处理(尺寸计算、绘制),都可以放到异步去做处理,例如下面代码:

// 文字计算
[@"text" boundingRectWithSize:CGSizeMake(100, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:nil context:nil];
    
// 文字绘制
[@"text" drawWithRect:CGRectMake(0, 0, 100, 100) options:NSStringDrawingUsesLineFragmentOrigin attributes:nil context:nil];

 

还有对图片的处理,对图片的解码和绘制都是会消耗性能的

我们经常使用的给UIImage赋值的方法,其本质是会去进行图片的解码和绘制的,所以我们可以将解码绘制的过程放在子线程来处理,详细代码如下

复制代码
// imageNamed:底层会进行对图片的解码和绘制
UIImageView *imageView = [[UIImageView alloc] init];
imageView.image = [UIImage imageNamed:@"timg"];

// 换成如下方法
UIImageView *imageView = [[UIImageView alloc] init];
self.imageView = imageView;

dispatch_async(dispatch_get_global_queue(0, 0), ^{
    // 获取CGImage
    CGImageRef cgImage = [UIImage imageNamed:@"timg"].CGImage;

    // alphaInfo
    CGImageAlphaInfo alphaInfo = CGImageGetAlphaInfo(cgImage) & kCGBitmapAlphaInfoMask;
    BOOL hasAlpha = NO;
    if (alphaInfo == kCGImageAlphaPremultipliedLast ||
        alphaInfo == kCGImageAlphaPremultipliedFirst ||
        alphaInfo == kCGImageAlphaLast ||
        alphaInfo == kCGImageAlphaFirst) {
        hasAlpha = YES;
    }

    // bitmapInfo
    CGBitmapInfo bitmapInfo = kCGBitmapByteOrder32Host;
    bitmapInfo |= hasAlpha ? kCGImageAlphaPremultipliedFirst : kCGImageAlphaNoneSkipFirst;

    // size
    size_t width = CGImageGetWidth(cgImage);
    size_t height = CGImageGetHeight(cgImage);

    // context
    CGContextRef context = CGBitmapContextCreate(NULL, width, height, 8, 0, CGColorSpaceCreateDeviceRGB(), bitmapInfo);

    // draw
    CGContextDrawImage(context, CGRectMake(0, 0, width, height), cgImage);

    // get CGImage
    cgImage = CGBitmapContextCreateImage(context);

    // into UIImage
    UIImage *newImage = [UIImage imageWithCGImage:cgImage];

    // release
    CGContextRelease(context);
    CGImageRelease(cgImage);

    // back to the main thread
    dispatch_async(dispatch_get_main_queue(), ^{
        self.imageView.image = newImage;
    });
});
复制代码

 

以上就是陪玩系统开发,CPU引起的卡顿如何优化?, 更多内容欢迎关注之后的文章

posted @   云豹科技-苏凌霄  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
历史上的今天:
2023-02-08 视频直播系统源码,vue中captcha.js生成验证码
2023-02-08 在线直播源码,js获取滚动条的位置
2023-02-08 直播平台搭建,elementui的导航路由递归报错解决
2022-02-08 直播系统源代码,选择验证方式时选择邮箱验证
2022-02-08 短视频平台开发,查找日期和时间的数组
2022-02-08 直播源码网站,新用户登录时的注册页面和登录页面
点击右上角即可分享
微信分享提示