美文网首页
性能优化

性能优化

作者: qjsxq | 来源:发表于2020-07-15 16:44 被阅读0次

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

    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];
    

    2、图片处理(解码、绘制)

    - (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;
            });
        });
    }
    
    

    子线程解码,绘制 主线程显示
    // 解码
    1、image--> CgImage
    2、创建位图上下文CGContextRef,将图片数据画到上下文中
    3、从上下文中获取画的图片
    4、主线程显示 (用的就是解码过的图片)

    相关文章

      网友评论

          本文标题:性能优化

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