陪玩系统开发,CPU引起的卡顿如何优化?
陪玩系统开发,CPU引起的卡顿如何优化?
1、比如用不到事件处理的地方,可以考虑使用CALayer取代UIView
2、还有能用基本数据类型就不用对象类型等等
1、比如frame、bounds、transform等属性,尽量减少不必要的修改
2、尽量提前计算好布局,在有需要时一次性调整对应的属性,不要多次修改属性
3、尽量减少使用Autolayout,Autolayout会比直接设置frame消耗更多的CPU资源
4、其他需要设置的属性最后是能确定时再赋值,不要多次更改
如果图片本身的大小和我们给予的大小有出入,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引起的卡顿如何优化?, 更多内容欢迎关注之后的文章
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 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 直播源码网站,新用户登录时的注册页面和登录页面