有时候TableView里面有很多图片处理。正常情况下是从网络上获取的。如果不是从网络上获取而是从本地获取图片放到TableView上该怎么处理呢?
首先抛出网络上获取图片这个因素从本地获取时候。可能会遇到的一些问题。
1:圆角图片该怎么处理
2:图片太大怎么办
3:图片可能要解码
4:甚至如果imageNamed 的内存机制不合理我们应该怎么办
5:如果每个cell里太多的处理图片的内容可能会影响流畅度怎么办
1:第一个问题可以求助设计给你一个遮罩图片,但是遮罩也可能造成层级变多,我们可以考虑技术方面处理。如图所示:
2:图片太大会造成Color Misaligned Images这个是之前上篇说明的一个问题。我们可以通过代码缩放,可以参考这个链接有几种方法处理还有效率对比:http://nshipster.com/image-resizing/ 如果所示
3:图片要解码,从网络获取到本地显示因为第三方库是做了解码,既当图片显示到屏幕才做解码,并且还是在主线程。我们imageNamed 是已经解码之后并缓存到内存的。我们可以直接利用多线程技术来异步解码提高效率。如图所示:我这里用的SD的一个方法。
4:首先imageNamed 方法会把图片加载到内存中,如果内存不存在就去图片管理文件夹里加载,可能在任何时候会被清理(未被使用的),清理的时机可能是应用在后台或者内存紧张的时候系统会清理。对于不显示在tableView里这样滑动重用内存里面的图片我们大可以用imageWithContentsOfFile可以减小内存压力。有时候对如果很大的图片做缓存,有时候系统可能清理掉,在界面切换会性能下降,并且一些你不想用的图片你不能自己从内存清理他,机制不透明你也不能设置内存缓存的大小。如图所示:
5:这个情况,如果每个cell处理很多复杂图片内容,快速滑动,有可能很卡,如果我们在cell将要消失的时候didEndDisplayingCell,可以把消失的cell 中处理图片的方法取消,这样只处理当前显示的cell,这样压力会很小。这会牵扯到多线程技术,这个方面也可以处理下。
总结:以上就是在tableView中对图片的一些处理,下面是最终代码如图所示: