Closed YangKa closed 6 years ago
我看下这个问题
应该是渐进式加载过程中下载线程和解码线程同时访问一个NSData导致的。最近项目版本发布,比较忙,稍后会修复。
虽然我这没有出现badaccess。但是问题是已经修复了,可以再试试。 NSMutableData由于不断被下载线程写入,解码的时候会出现线程问题。改为用NSData包装一下已经下载的部分Data,无需额外复制内存,NSData本身也不会被改变,从而解决这个问题。 DataRace问题我整体梳理了一下,把几个有data race的property都加上了线程安全的保护
工具
:XCode 9.0模拟器:
iOS11.0 iPhone 8 plus步骤:
1.打开Demo,点击清理缓存 2.进入自定义属性页面,打开Progresive开关,点击大图 big.jpg 结果:大部分情况会出现crash的情况问题推测:
多线程导致的问题初步分析:
LKImageRequest
对象isDecoding
和progress
属性存在data race
现象 2.LKImageSystemDecoder
对象中对图片数据渐进式解码成CGImageRef的过程会出现BAD_ACCESS问题行代码: else if (count == 1){
CGImageRef imageRef = CGImageSourceCreateImageAtIndex(imageSource, 0, option);