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

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

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

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

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

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
                })
            }
            
        })
    }
}

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

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中可用,更高版本中需要修改少部分即可。

目录
相关文章
|
Linux 开发工具 Android开发
FFmpeg开发笔记(六十)使用国产的ijkplayer播放器观看网络视频
ijkplayer是由Bilibili基于FFmpeg3.4研发并开源的播放器,适用于Android和iOS,支持本地视频及网络流媒体播放。本文详细介绍如何在新版Android Studio中导入并使用ijkplayer库,包括Gradle版本及配置更新、导入编译好的so文件以及添加直播链接播放代码等步骤,帮助开发者顺利进行App调试与开发。更多FFmpeg开发知识可参考《FFmpeg开发实战:从零基础到短视频上线》。
2294 2
FFmpeg开发笔记(六十)使用国产的ijkplayer播放器观看网络视频
|
canal 缓存 NoSQL
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
根据对一致性的要求程度,提出多种解决方案:同步删除、同步删除+可靠消息、延时双删、异步监听+可靠消息、多重保障方案
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
|
JSON 中间件 Go
Go 网络编程:HTTP服务与客户端开发
Go 语言的 `net/http` 包功能强大,可快速构建高并发 HTTP 服务。本文从创建简单 HTTP 服务入手,逐步讲解请求与响应对象、URL 参数处理、自定义路由、JSON 接口、静态文件服务、中间件编写及 HTTPS 配置等内容。通过示例代码展示如何使用 `http.HandleFunc`、`http.ServeMux`、`http.Client` 等工具实现常见功能,帮助开发者掌握构建高效 Web 应用的核心技能。
665 61
Vite使用svg-企业级开发(支持本地svg和网络svg渲染)
本教程介绍如何在Vite项目中集成SVG图标插件。首先安装`vite-plugin-svg-icons`,配置插件指向SVG图标目录,并注册全局组件。接着创建SVG图标组件,支持内部图标与外部图片展示。通过简单配置,即可在页面中灵活使用各类SVG图标,提升开发效率。
630 0
|
开发者
鸿蒙仓颉语言开发教程:网络请求和数据解析
本文介绍了在仓颉开发语言中实现网络请求的方法,以购物应用的分类列表为例,详细讲解了从权限配置、发起请求到数据解析的全过程。通过示例代码,帮助开发者快速掌握如何在网络请求中处理数据并展示到页面上,减少开发中的摸索成本。
鸿蒙仓颉语言开发教程:网络请求和数据解析
|
监控 安全 网络协议
恶意软件无处逃!国内版“Manus”AiPy开发Windows沙箱工具,进程行为+网络传输层级监控! 头像 豪气的
NImplant.exe 是一款后渗透测试工具,可实现远程管理与持久化控制。其优点包括无文件技术、加密通信和插件扩展,但也存在被检测风险及配置复杂等问题。为深入分析其行为,我们基于 aipy 开发了 Windows 沙箱工具,针对桌面上的 NImplant.exe 进行多维度分析,涵盖进程行为、网络连接(如 TCP 请求、目标 IP/域名)、文件控制等,并生成传输层监控报告与沙箱截图。结果显示,aipy 工具响应迅速,报告清晰易读,满足分析需求。
|
网络协议 物联网
VB6网络通信软件上位机开发,TCP网络通信,读写数据并处理,完整源码下载
本文介绍使用VB6开发网络通信上位机客户端程序,涵盖Winsock控件的引入与使用,包括连接服务端、发送数据(如通过`Winsock1.SendData`方法)及接收数据(利用`Winsock1_DataArrival`事件)。代码实现TCP网络通信,可读写并处理16进制数据,适用于自动化和工业控制领域。提供完整源码下载,适合学习VB6网络程序开发。 下载链接:[完整源码](http://xzios.cn:86/WJGL/DownLoadDetial?Id=20)
648 12
|
安全 网络安全 Android开发
安卓与iOS开发:选择的艺术网络安全与信息安全:漏洞、加密与意识的交织
【8月更文挑战第20天】在数字时代,安卓和iOS两大平台如同两座巍峨的山峰,分别占据着移动互联网的半壁江山。它们各自拥有独特的魅力和优势,吸引着无数开发者投身其中。本文将探讨这两个平台的特点、优势以及它们在移动应用开发中的地位,帮助读者更好地理解这两个平台的差异,并为那些正在面临选择的开发者提供一些启示。
341 56
鸿蒙开发:切换至基于rcp的网络请求
本文的内容主要是把之前基于http封装的库,修改为当前的Remote Communication Kit(远场通信服务),无非就是通信的方式变了,其他都大差不差。
665 4
鸿蒙开发:切换至基于rcp的网络请求
|
XML 开发工具 Android开发
FFmpeg开发笔记(五十六)使用Media3的Exoplayer播放网络视频
ExoPlayer最初是为了解决Android早期MediaPlayer控件对网络视频兼容性差的问题而推出的。现在,Android官方已将其升级并纳入Jetpack的Media3库,使其成为音视频操作的统一引擎。新版ExoPlayer支持多种协议,解决了设备和系统碎片化问题,可在整个Android生态中一致运行。通过修改`build.gradle`文件、布局文件及Activity代码,并添加必要的权限,即可集成并使用ExoPlayer进行网络视频播放。具体步骤包括引入依赖库、配置播放界面、编写播放逻辑以及添加互联网访问权限。
2257 1
FFmpeg开发笔记(五十六)使用Media3的Exoplayer播放网络视频