共计 8 篇文章

一个好的图片加载缓存框架是怎么样炼成的?

SDWebImage基本上是app开发的标配了,它的源码我一直没有去看。因为我觉得图片加载缓存很容易,无非是先看两级缓存有没,有就加载,没有就去服务端获取并缓存下来。无非在图片的解码,缓存的策略上显点神通提高效率罢了。然而我还是太年轻了,当自己真正地去实现一个图片加载缓存的功能时,就发现里面的学问还是很大的。 几个问题 首先考虑最常见的情况,就是tableView上每个cell都有一个头像,然后只像SD那样sd_setImageUrl。基于此先问4个小问题,如果4个问题都有答案了,那就不用在往下看了。 tableView有cell复用问题,用户下拉后,原先的图片请求完成,cell会加载导致头像乱序,怎么避免? 有个请求失败了,接下去有相同的请求怎么办? ...

iOS数据缓存的各个实现方式及YYCache源码分析

数据的缓存分为两类,一类内存缓存,一类磁盘缓存。每类缓存都有不同的实现方式。 内存缓存 NSMutableDictionary NSMutableDictionary使用方便,读取速度O(1),看起来是内存缓存的最好实现方法。不过其实它有两大缺点: 不能自动响应内存警告去清除缓存,需要自己来实现。 存值的时候键值会copy,所以键的类必须实现NSCopying协议。 NSCache NSCache一直处于NSMutableDictionary的阴影之下,很多人都忘记了它的存在,其实它弥补了NSMutableDictionary的两大缺点。 而且它的使用方法和NSMutableDictionary很像,setObject:forKey:cost:,多的那个cost参数,很多人直接存object所占内存的字节数。不过NSHipster说: ...

TwitterCover实现及优化

现在很多App都有一个实现首页下拉图片变大变模糊效果的动画,这个最早是Twitter实现的,确实是很有创意的动画。TwitterCover就是实现这个动画的开源库,用起来很方便,但是有个缺点就是内存消耗很大。 TwitterCover github地址 它的源码非常简单,思路很清晰。 为了方便调用,对原有代码没有侵入性: UIScrollerView的category,有个imageView属性。 监控contentOffset,根据contentOffset.y可以知道上拉下滑的距离,从而改变imageView的大小及image。 图片变模糊变大的方法: 用模糊函数对原image处理,生成20张图片,然后根据contentOffset.y重新setImage。 //生成20张图片 - (void) ...