陪玩系统开发,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), ^{// 获取CGImageCGImageRef cgImage = [UIImage imageNamed:@"timg"].CGImage;// alphaInfoCGImageAlphaInfo alphaInfo = CGImageGetAlphaInfo(cgImage) & kCGBitmapAlphaInfoMask;BOOL hasAlpha = NO;if (alphaInfo == kCGImageAlphaPremultipliedLast ||alphaInfo == kCGImageAlphaPremultipliedFirst ||alphaInfo == kCGImageAlphaLast ||alphaInfo == kCGImageAlphaFirst) {hasAlpha = YES;}// bitmapInfoCGBitmapInfo bitmapInfo = kCGBitmapByteOrder32Host;bitmapInfo |= hasAlpha ? kCGImageAlphaPremultipliedFirst : kCGImageAlphaNoneSkipFirst;// sizesize_t width = CGImageGetWidth(cgImage);size_t height = CGImageGetHeight(cgImage);// contextCGContextRef context = CGBitmapContextCreate(NULL, width, height, 8, 0, CGColorSpaceCreateDeviceRGB(), bitmapInfo);// drawCGContextDrawImage(context, CGRectMake(0, 0, width, height), cgImage);// get CGImagecgImage = CGBitmapContextCreateImage(context);// into UIImageUIImage *newImage = [UIImage imageWithCGImage:cgImage];// release CGContextRelease(context);CGImageRelease(cgImage);// back to the main threaddispatch_async(dispatch_get_main_queue(), ^{self.imageView.image = newImage;}); });
以上就是陪玩系统开发,CPU引起的卡顿如何优化?, 更多内容欢迎关注之后的文章