发现现象
- 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);
});
});
}
网友评论