美文网首页
UIImage+ImageEffects中的CGContextD

UIImage+ImageEffects中的CGContextD

作者: Maj_sunshine | 来源:发表于2019-06-11 23:02 被阅读0次

    发现现象

    • UIImage+ImageEffects绘制的模糊效果在公司的测试机iPhone6 plus 11.4.1版本上出现内存暴增的情况. 直到闪退
    • 在主线程中绘制会导致卡顿

    出现原因

    Simulator Screen Shot - iPhone 6 - 2019-06-11 at 22.39.51.png
    • 列表滑动cell复用过程中不断的直接模糊效果的绘制. (模糊图片绘制生成后缓存到本地,然而快速滑动的时候会导致不停的绘制但是绘制的图片还未生成)导致
      开始绘制->查询缓存->缓存没有->开始绘制->查询缓存->缓存没有...
      这样一个恶性循环.

    解决

    • 其实解决方法就是加个锁, 就是调试这个bug的原因的过程比较麻烦.
      这里图片用SD去缓存了
    - (void)setEffectImage:(UIImage *)effectImage imageStr:(NSString *)imageStr color:(UIColor *)color {
        static pthread_mutex_t pLock;
        pthread_mutex_init(&pLock, NULL);
        dispatch_async(dispatch_get_global_queue(0, 0), ^{
            pthread_mutex_lock(&pLock);
            UIImage *image = nil;
            if (color) {
                image = [effectImage applyTintEffectWithColor:color];
            } else {
                image = [effectImage applyDarkEffect];
            }
            dispatch_async(dispatch_get_main_queue(), ^{
                self.image = image;
                NSString *key = imageStr;
                if (addMeari) {
                    key = [imageStr stringByAppendingString:@"meari"];
                }
                [[SDImageCache sharedImageCache] storeImage:image forKey:key toDisk:YES];
                pthread_mutex_unlock(&pLock);
            });
        });
    }
    

    相关文章

      网友评论

          本文标题:UIImage+ImageEffects中的CGContextD

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