美文网首页
底层原理(十)------性能优化

底层原理(十)------性能优化

作者: SwordDevil | 来源:发表于2021-06-01 14:20 被阅读0次

CPU和GPU

屏幕成像原理

卡顿产生的原因


如果CPU跟GPU处理的时间刚好到垂直同步信号,则屏幕成像
如果CPU跟GPU处理的时间比较短,则会等待垂直同步信号的到来,然后成像
如果CPU跟GPU处理的时间较长,超过垂直同步信号到来,则会把上一帧的图像显示出来,俗称丢帧,也就是卡顿产生

卡顿优化-CPU

// 图片处理(解码、绘制)
- (void)image
{
    UIImageView *imageView = [[UIImageView alloc] init];
    imageView.frame = CGRectMake(100, 100, 100, 56);
    [self.view addSubview:imageView];
    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;
        });
    });
}

卡顿优化-GPU

离屏渲染

卡顿检测


开源库:卡顿检测

耗电的主要来源

耗电优化


APP的启动


APP的启动-dyld
APP的启动-runtime
APP的启动-main

APP的启动优化

安装包瘦身

  • 安装包(IPA)主要由可执行文件、资源组成
    资源(图片、音频、视频等)
    采取无损压缩
    去除没有用到的资源: https://github.com/tinymind/LSUnusedResources

  • 可执行文件瘦身
    编译器优化
    Strip Linked Product、Make Strings Read-Only、Symbols Hidden by Default设置为YES
    去掉异常支持,Enable C++ Exceptions、Enable Objective-C Exceptions设置为NO, Other C Flags添加-fno-exceptions

  • 利用AppCode(https://www.jetbrains.com/objc/)检测未使用的代码:菜单栏 -> Code -> Inspect Code

  • 编写LLVM插件检测出重复代码、未被调用的代码

LinkMap


可借助第三方工具解析LinkMap文件: https://github.com/huanxsd/LinkMap

相关文章

网友评论

      本文标题:底层原理(十)------性能优化

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