ibireme / YYWebImage

Asynchronous image loading framework.
MIT License
3.56k stars 615 forks source link

发现一个问题就是YYWebImageFromType 状态不对,已经缓存到磁盘中,但是读取的时候直接从内存中读取 #33

Closed af8229 closed 8 years ago

af8229 commented 8 years ago
[imageView yy_setImageWithURL:[NSURL URLWithString:photoImage.smallImage]
                      placeholder:[UIImage createImageWithColor:VSD_COLOR_FROM_HEX(0xfcfaf9, 1.0)]
                          options:YYWebImageOptionSetImageWithFadeAnimation
                       completion:^(UIImage *image, NSURL *url, YYWebImageFromType from, YYWebImageStage stage, NSError *error) {
                           NSLog(@"from : %d", from) ;
                           NSLog(@"url:%@ ---> image: %@",url, image) ;
                           UIImage *i = [[YYWebImageManager sharedManager].cache getImageForKey:url.absoluteString] ;
                           NSLog(@"image ---- : %@", i ) ;
                       }] ;

重新滑动一下cell就好了,数据就看到了

ibireme commented 8 years ago

From 值是0,即 YYWebImageFromNone。我猜这可能是下载过程中被取消了。

你可以打印一下 stage 这个值,看看图片加载是否是被取消了。

af8229 commented 8 years ago

因为我项目重的图片框架换成YYWebImage,然后发现在一个地方会出现图片获取不到情况,从网络上获取没有问题,下次重新进入才会出现这个问题,我先尝试打印一下stage

af8229 commented 8 years ago

已经打印,确实stage是0,上下滚动一下cell就没有问题了

ibireme commented 8 years ago

那就说明图片设置被取消了。 检查一下,ImageView 是否被释放、yy_cancelCurrentHighlightedImageRequest 是否被调用、是否又在这过程中重新设置了一次。

af8229 commented 8 years ago

cancel的方法没有被掉用过, imageView也没有被释放,,其他加载图片的地方都没有该问题出现,调用加载图片的方法是在layoutSubView里面,可能存在会多次设置的问题

ibireme commented 8 years ago

如果图片设置是在 layoutSubView 里进行的,那每次调整视图大小时,都会触发一次图片设置。 建议改为 Cell 更新数据时设置一次,避免多次重复设置。

另外,如果你需要在 completion 里进行某些操作,最好先判断 (stage == YYWebImageStageFinished)。

af8229 commented 8 years ago

希望大神库未来可以兼容这个问题 ,因为这块代码之前使用sdwebimage实现的,麻烦您了

ibireme commented 8 years ago

这个逻辑没问题啊,判断一下 stage 就好了。

另外,如果 SDWebImage 能满足需求,那就没必要换了,清空旧的缓存、修改代码什么的也都挺繁琐的。

af8229 commented 8 years ago

在一个tableView里面出现很多重复的图片素材,比如头像都是一个人发的内容,这个时候就出现某几个cell的图片没有显示的问题出现了,这种情况比较容易出现这个问题

ibireme commented 8 years ago

在我测试中(https://github.com/ibireme/YYKit )没有出现过这种情况。

你可以贴一下你设置头像相关的代码,我来看看是什么问题。

af8229 commented 8 years ago

在你的测试代码中,吧所有的图片链接写成一个链接也有这个问题, 就是把links里面的链接写了几个一样的,然后有时候最后一张图片或者中间的图片不出现的问题也存在,滑动一下就好了,多重启动几次问题就出现了

ibireme commented 8 years ago

我又测了一下,把我的 Demo 中头像换为一个 URL,然后在模拟器和真机上测试了若干次,也重启了看一下,仍然没有复现。我检查了下代码逻辑,也没有发现问题。

所以,你能把你设置头像的代码贴上来看下吗?

af8229 commented 8 years ago

snip20151228_6

这个shi是运行之后的截图 ,代码

然后 NSArray links = [ NSArray links = @[ // 几个相同的地址 ]; ] ;

af8229 commented 8 years ago

就是在你的webimage的测试代码中 改了2处地方,然后多run几次就出现这个这个问题,每次重新run进去偶尔出现这个问题

af8229 commented 8 years ago

对了 高度也改了下

ibireme commented 8 years ago

看起来是有什么问题,稍后我看一下。

af8229 commented 8 years ago

snip20151228_10 感觉是这段代码有些bug,如果不为cancelled, block传出去cancel,应该传出去是finished状态吧

ibireme commented 8 years ago

修复了一下上面这个问题。 抱歉我还是没能复现你上面的,只能拜托你更新代码看一下了。

af8229 commented 8 years ago

就是那个cancel状态引起的问题,改成finish之后没有出现这个问题了。

ibireme commented 8 years ago

Thanks!