android 性能iOS 性能iOS细节知识收录

【iOS-性能优化一】卡顿产生的原因

2018-09-25  本文已影响514人  GeniusWong

一、优化CPU

例:把图片的解码操作放到子线程

UIImageView *imgeView = [[UIImageView alloc] init];
    
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
       
        CGImageRef cgImage = [UIImage imageNamed:@""].CGImage;
        
        CGImageAlphaInfo alphaInfo = CGImageGetAlphaInfo(cgImage) &
                            kCGBitmapAlphaInfoMask;
        BOOL hasAlpha = NO;
        if (alphaInfo == kCGImageAlphaPremultipliedLast ||
            alphaInfo==kCGImageAlphaPremultipliedFirst ||
            alphaInfo == kCGImageAlphaLast ||
            alphaInfo == kCGImageAlphaFirst) {
            hasAlpha = YES;
        }
        
        CGBitmapInfo bitmapInfo = kCGBitmapByteOrder32Host;
        
        bitmapInfo |= hasAlpha ? kCGImageAlphaPremultipliedFirst :
                            kCGImageAlphaNoneSkipFirst;
        
        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];
        
        // realease
        CGContextRelease(context);
        CGImageRelease(cgImage);
        
        // back to the main thread
        dispatch_async(dispatch_get_main_queue(), ^{
            imgeView.image = newImage;
        });
        
    });

二、优化GPU

关于离屏渲染

三、卡顿检测

这是一个用来监听卡顿的工具包:
https://github.com/UIControl/LXDAppFluecyMonitor

四、耗电优化

上一篇下一篇

猜你喜欢

热点阅读