http异步加载图片——SDWebImage使用方法
关于iOS上http异步图片加载的工具,在网上看到两个被推荐的开源工具。一个是EGOImageLoader,另一个是SDWebImage,两种工具都自带缓存机制,非常适用于我们这个应用,省去了定期清理本地图片的麻烦。
我分别将两种工具加到了新闻摘要列表中,查看效果,最终选定了SDWebImage。
两种工具的对比如下:
1、显示效率
EGOImageLoader在列表滚动过程中,对于显示过的图片,虽然有缓存,但是还要有1-2s的加载时间,用户体验非常不好,当快速滚动列表的时候,基本上看不到任何图片,都是默认图片。而SDWebImage就没有这个问题,加载过的文件基本都是直接显示,这也是选择SDWebImage的主要原因
2、使用方便程度
从工具的使用角度来说,EGOImageLoader相对简单一点,只需要普通的导入几个文件,包含到需要使用的ViewController即可。而且它可以很容易找到设置缓存时间的地方进行设置,默认缓存时间是一天。
而SDWebImage的使用就相对复杂一点,具体添加方法如下。
(1)下载附件进行解压(也可从https://github.com/rs/SDWebImage下载最新代码),解压到工程目录下
(2)在工程左边的目录索引中右键选择 Add Files To“工程名”,选择SDWebImage.xcodeproj添加到Frameworks中
(3)在Target->Build Phases->Link Binary with Libraries中添加 ImageIO.Framework;与此同时我们可以看到系统会自动提示WorkSpace中可添加的库文件,根据工程的类型(我们的工程使用的是ARC)选择普通的还是ARC类的库:libSDWebImage.a
(4)这时编译可以通过,但是运行的时候会崩溃。还需要在target->Build Settings->Linking目录下的Other Linker Flags里面添加:
-force_load ${BUILT_PRODUCTS_DIR}/libSDWebImage.a
这时候环境应该算配置完了,如果还是不能正常使用,可以参考这篇文章:http://stackoverflow.com/questions/8504953/sdwebimage-setimagewithurl-fails-when-used-to-set-image-of-a-uitableviewcell
使用的方法是在需要使用的ViewController内包含#import <SDWebImage/UIImageView+WebCache.h>
对于一个UIImageView的对象image,使用如下语句即可达成加载图片的目的,placeholderImage就是加载过程中的默认图片
关于iOS上http异步图片加载的工具,在网上看到两个被推荐的开源工具。一个是EGOImageLoader,另一个是SDWebImage,两种工具都自带缓存机制,非常适用于我们这个应用,省去了定期清理本地图片的麻烦。
我分别将两种工具加到了新闻摘要列表中,查看效果,最终选定了SDWebImage。
两种工具的对比如下:
1、显示效率
EGOImageLoader在列表滚动过程中,对于显示过的图片,虽然有缓存,但是还要有1-2s的加载时间,用户体验非常不好,当快速滚动列表的时候,基本上看不到任何图片,都是默认图片。而SDWebImage就没有这个问题,加载过的文件基本都是直接显示,这也是选择SDWebImage的主要原因
2、使用方便程度
从工具的使用角度来说,EGOImageLoader相对简单一点,只需要普通的导入几个文件,包含到需要使用的ViewController即可。而且它可以很容易找到设置缓存时间的地方进行设置,默认缓存时间是一天。
而SDWebImage的使用就相对复杂一点,具体添加方法如下。
(1)下载附件进行解压(也可从https://github.com/rs/SDWebImage下载最新代码),解压到工程目录下
(2)在工程左边的目录索引中右键选择 Add Files To“工程名”,选择SDWebImage.xcodeproj添加到Frameworks中
(3)在Target->Build Phases->Link Binary with Libraries中添加 ImageIO.Framework;与此同时我们可以看到系统会自动提示WorkSpace中可添加的库文件,根据工程的类型(我们的工程使用的是ARC)选择普通的还是ARC类的库:libSDWebImage.a
(4)这时编译可以通过,但是运行的时候会崩溃。还需要在target->Build Settings->Linking目录下的Other Linker Flags里面添加:
-force_load ${BUILT_PRODUCTS_DIR}/libSDWebImage.a
这时候环境应该算配置完了,如果还是不能正常使用,可以参考这篇文章:http://stackoverflow.com/questions/8504953/sdwebimage-setimagewithurl-fails-when-used-to-set-image-of-a-uitableviewcell
使用的方法是在需要使用的ViewController内包含#import <SDWebImage/UIImageView+WebCache.h>
对于一个UIImageView的对象image,使用如下语句即可达成加载图片的目的,placeholderImage就是加载过程中的默认图片
[image setImageWithURL:(NSURL) placeholderImage:(UIImage)];
如上所述就是SDWebImage最简单的使用方法,它应该还有很多更优化的使用方法,有兴趣的可以仔细研究一下,参考文档的地址是:http://hackemist.com/SDWebImage/doc/
目前从显示效果来看,加载速度较ftp要快很多,几乎看不出加载时间。
未完成工作:现在还没有深入到代码内部详细研究缓存的机制和时间和对流量的使用情况。有时间要对这些问题进行详细论证和确认。
在此抛个砖,如果有更好的解决方法,欢迎指正~
![](http://oa.icampus123.com/inc/attach.php?AID=481&MODULE=bbs&YM=1212&ATTACHMENT_ID=1680516145&ATTACHMENT_NAME=SDWebImage.png&DIRECT_VIEW=1)