iOS开发swift版异步加载网络图片(带缓存和缺省图片)

简介:

iOS开发之swift版异步加载网络图片

    与SDWebImage异步加载网络图片的功能相似,只是代码比较简单,功能没有SD的完善与强大,支持缺省添加图片,支持本地缓存。

     异步加载图片的核心代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
  func setZYHWebImage(url:NSString?, defaultImage:NSString?, isCache:Bool){
         var ZYHImage:UIImage?
         if  url == nil {
             return
         }
         // 设置默认图片
         if  defaultImage != nil {
             self.image=UIImage(named: defaultImage!)
         }
         // 是否进行缓存处理
         if  isCache {
         // 缓存管理类
             var data:NSData?=ZYHWebImageChcheCenter.readCacheFromUrl(url!)
             if  data != nil {
                 ZYHImage=UIImage(data: data!)
                 self.image=ZYHImage
             } else {
             // 获取异步线程
                var dispath=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)
                 dispatch_async(dispath, { () -> Void  in
                     var URL:NSURL = NSURL(string: url!)!
                     var data:NSData?=NSData(contentsOfURL: URL)
                     if  data != nil {
                         ZYHImage=UIImage(data: data!)
                         // 写缓存
                         ZYHWebImageChcheCenter.writeCacheToUrl(url!, data: data!)
                         // 主线程中刷新UI
                         dispatch_async(dispatch_get_main_queue(), { () -> Void  in
                             // 刷新主UI
                             self.image=ZYHImage
                         })
                     }
                     
                 })
             }
         } else {
             var dispath=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)
             dispatch_async(dispath, { () -> Void  in
                 var URL:NSURL = NSURL(string: url!)!
                 var data:NSData?=NSData(contentsOfURL: URL)
                 if  data != nil {
                     ZYHImage=UIImage(data: data!)
                     // 写缓存
                     dispatch_async(dispatch_get_main_queue(), { () -> Void  in
                         // 刷新主UI
                         self.image=ZYHImage
                     })
                 }
                 
             })
         }
     }
     
}

缓存的处理这里采用的是写文件的方式,通过文件名来对缓存进行管理,这个框架还不完善,后面会加入缓存清除等功能。缓存的核心代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
class func readCacheFromUrl(url:NSString)->NSData?{
         var data:NSData?
         var path:NSString=ZYHWebImageChcheCenter.getFullCachePathFromUrl(url)
         if  NSFileManager.defaultManager().fileExistsAtPath(path) {
             data=NSData.dataWithContentsOfMappedFile(path) as? NSData
         }
         return  data
     }
     
     class func writeCacheToUrl(url:NSString, data:NSData){
         var path:NSString=ZYHWebImageChcheCenter.getFullCachePathFromUrl(url)
        println(data.writeToFile(path, atomically:  true ))
     }
     // 设置缓存路径
     class func getFullCachePathFromUrl(url:NSString)->NSString{
         var chchePath=NSHomeDirectory().stringByAppendingString( "/Library/Caches/MyCache" )
         var fileManager:NSFileManager=NSFileManager.defaultManager()
         fileManager.fileExistsAtPath(chchePath)
         if  !(fileManager.fileExistsAtPath(chchePath)) {
             fileManager.createDirectoryAtPath(chchePath, withIntermediateDirectories:  true , attributes: nil, error: nil)
         }
         // 进行字符串处理
         var newURL:NSString
         newURL=ZYHWebImageChcheCenter.stringToZYHString(url)
         chchePath=chchePath.stringByAppendingFormat( "/%@" , newURL)
         return  chchePath
     }
     
     class func stringToZYHString(str:NSString)->NSString{
         var newStr:NSMutableString=NSMutableString()
         for  var i:NSInteger=0; i < str.length; i++ {
             var c:unichar=str.characterAtIndex(i)
             if  (c>=48&&c<=57)||(c>=65&&c<=90)||(c>=97&&c<=122){
                 newStr.appendFormat( "%c" , c)
             }
         }
         return  newStr.copy() as NSString
         
     }

框架的github地址,欢迎指正与扩展:https://github.com/ZYHshao/swift-ZYHWebImage

因xcode的版本不同,swift语言语法随环境时常会变化,此版本在6.1中可用,更高版本中需要修改少部分即可。


目录
相关文章
|
4月前
|
canal 缓存 NoSQL
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
根据对一致性的要求程度,提出多种解决方案:同步删除、同步删除+可靠消息、延时双删、异步监听+可靠消息、多重保障方案
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
|
2月前
|
缓存 监控 前端开发
在资源加载优化中,如何利用浏览器缓存提升性能?
通过以上这些方法,可以有效地利用浏览器缓存来提升资源加载的性能,减少网络请求次数,提高用户体验和应用的响应速度。同时,需要根据具体的应用场景和资源特点进行灵活调整和优化,以达到最佳的效果。此外,随着技术的不断发展和变化,还需要持续关注和学习新的缓存优化方法和策略。
99 53
|
2月前
|
存储 缓存 监控
后端开发中的缓存机制:深度解析与最佳实践####
本文深入探讨了后端开发中不可或缺的一环——缓存机制,旨在为读者提供一份详尽的指南,涵盖缓存的基本原理、常见类型(如内存缓存、磁盘缓存、分布式缓存等)、主流技术选型(Redis、Memcached、Ehcache等),以及在实际项目中如何根据业务需求设计并实施高效的缓存策略。不同于常规摘要的概述性质,本摘要直接点明文章将围绕“深度解析”与“最佳实践”两大核心展开,既适合初学者构建基础认知框架,也为有经验的开发者提供优化建议与实战技巧。 ####
|
2月前
|
安全 Swift iOS开发
Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法
本文深入探讨了 Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法。Swift 以其简洁、高效和类型安全的特点,结合 UIKit 丰富的组件和功能,为开发者提供了强大的工具。文章从 Swift 的语法优势、类型安全、编程模型以及与 UIKit 的集成,到 UIKit 的主要组件和功能,再到构建界面的实践技巧和实际案例分析,全面介绍了如何利用这些技术创建高质量的用户界面。
34 2
|
2月前
|
存储 缓存 监控
网站的图片资源是否需要设置缓存?
【10月更文挑战第18天】网站的图片资源一般是需要设置缓存的,但要根据图片的具体特点和网站的需求,合理设置缓存时间和缓存策略,在提高网站性能和用户体验的同时,确保用户能够获取到准确、及时的图片信息。
|
2月前
|
Swift iOS开发 UED
如何使用Swift和UIKit在iOS应用中实现自定义按钮动画
本文通过一个具体案例,介绍如何使用Swift和UIKit在iOS应用中实现自定义按钮动画。当用户点击按钮时,按钮将从圆形变为椭圆形,颜色从蓝色渐变到绿色;释放按钮时,动画以相反方式恢复。通过UIView的动画方法和弹簧动画效果,实现平滑自然的过渡。
62 1
|
3月前
|
Swift iOS开发 UED
如何使用Swift和UIKit在iOS应用中实现自定义按钮动画
【10月更文挑战第18天】本文通过一个具体案例,介绍如何使用Swift和UIKit在iOS应用中实现自定义按钮动画。当用户按下按钮时,按钮将从圆形变为椭圆形并从蓝色渐变为绿色;释放按钮时,动画恢复原状。通过UIView的动画方法和弹簧动画效果,实现平滑自然的动画过渡。
63 5
|
4月前
|
机器学习/深度学习 缓存 NoSQL
深度学习在图像识别中的应用与挑战后端开发中的数据缓存策略
本文深入探讨了深度学习技术在图像识别领域的应用,包括卷积神经网络(CNN)的原理、常见模型如ResNet和VGG的介绍,以及这些模型在实际应用中的表现。同时,文章也讨论了数据增强、模型集成等改进性能的方法,并指出了当前面临的计算资源需求高、数据隐私等挑战。通过综合分析,本文旨在为深度学习在图像识别中的进一步研究和应用提供参考。 本文探讨了后端开发中数据缓存的重要性和实现方法,通过具体案例解析Redis在实际应用中的使用。首先介绍了缓存的基本概念及其在后端系统性能优化中的作用;接着详细讲解了Redis的常见数据类型和应用场景;最后通过一个实际项目展示了如何在Django框架中集成Redis,
|
5月前
|
缓存 NoSQL Linux
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
146 1
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
消息中间件 缓存 监控
167 0