当前位置: 首页 > 编程日记 > 正文

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 invar URL:NSURL = NSURL(string: url!)!var data:NSData?=NSData(contentsOfURL: URL)if data != nil {ZYHImage=UIImage(data: data!)//写缓存ZYHWebImageChcheCenter.writeCacheToUrl(url!, data: data!)//主线程中刷新UIdispatch_async(dispatch_get_main_queue(), { () -> Void in//刷新主UIself.image=ZYHImage})}})}}else{var dispath=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)dispatch_async(dispath, { () -> Void invar 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//刷新主UIself.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) asNSData}return data}class func writeCacheToUrl(url:NSStringdata: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:NSStringnewURL=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中可用,更高版本中需要修改少部分即可。

相关文章:

2097352GB地图数据,AI技术酷炫渲染,《微软飞行模拟器》游戏即将上线

整理 | 若名出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;“只要是真实存在的地方&#xff0c;你都能抵达。”作为即将成为第一款将整个地球化作虚拟世界来供玩家玩的游戏&#xff0c;微软的《微软飞行模拟器》&#xff08;Microsoft Flight Simulator&#xff09;…

开源库nothings/stb的介绍及使用(图像方面)

GitHub上有个开源的stb库&#xff0c;Star数已过万&#xff0c;地址为https://github.com/nothings/stb&#xff0c;为何叫stb&#xff0c;是用的作者名字的缩写Sean T. Barrett。此库仅包含头文件&#xff0c;除stretchy_buffer.h外&#xff0c;其它所有文件以前缀stb开头&…

git stuff

git stuff trick git bash 无法标记复制解决办法 git bash窗口左上角图标点击,选择属性->选项->快速编辑模式 确定就ok了 Usual Commands 创建分支git branch branch-namegit push origin branch-name 删除分支git branch -r -d origin/branch-name 删除远程分支git push…

swift3.0之闭包

Swift 相比原先的 Objective-C 最重要的优点之一&#xff0c;就是对函数式编程提供了更好的支持。 Swift 提供了更多的语法和一些新特性来增强函数式编程的能力&#xff0c;本文就在这方面进行一些讨论。 Swift 概览 对编程语言有了一些经验的程序员&#xff0c;尤其是那些对多…

Linux下gdb attach的使用(调试已在运行的进程)

在Linux上&#xff0c;执行有多线程的程序时&#xff0c;当程序执行退出操作时有时会遇到卡死现象&#xff0c;如果程序模块多&#xff0c;代码量大&#xff0c;很难快速定位&#xff0c;此时可试试gdb attach方法。 测试代码main.cpp如下&#xff0c;这里为了使程序退出时产生…

一行Python代码能实现这么多丧心病狂的功能?(代码可复制)

最近看知乎上有一篇名为《一行 Python 能实现什么丧心病狂的功能&#xff1f;》&#xff08;https://www.zhihu.com/question/37046157&#xff09;的帖子&#xff0c;点进去发现一行Python代码可以做这么多丧心病狂的功能&#xff01;整理了一下知乎上这篇文章的内容&#xff…

一步一步写算法(之图结构)

原文:一步一步写算法&#xff08;之图结构&#xff09; 【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 图是数据结构里面的重要一章。通过图&#xff0c;我们可以判断两个点之间是不是具有连通性…

FFmpeg中可执行文件ffprobe用法汇总

从https://ffbinaries.com/downloads 下载最新的4.1版本的Windows 64位FFprobe&#xff0c;FFprobe用于从多媒体流中获取相关信息或查看文件格式信息&#xff0c;并以可读的方式打印&#xff0c;FFprobe可以作为一个命令行程序单独使用。 通过执行以下命令将FFprobe信息重定位…

CocoaPods导入的库其头文件导入的方法

尽管CocoaPods使用十分方便,但其导入的第三方框架还是要经过几步操作,才能供项目使用; 第一步:导入库 1>-在终端进入项目的根目录; 2>-输入:touch Podfile,则项目文件夹会创建一个空的Podfile,这时,你可以将你想要导入的库写在里面.如: platform :ios, 6.0 pod RESid…

Google、微软、阿里、腾讯、百度这些大公司在GitHub上开源投入排名分析 | CSDN原力计划...

扫码参与CSDN“原力计划”作者 | 村中少年来源 | CSDN原力计划获奖作品现在有越来越多的公司都参与了开源&#xff0c;其背后有各自的目的所在&#xff0c;姑且不予讨论。本文是从多个方面分析各大公司在开源上的投入情况。由于全世界绝大多数的开源项目都有发布到Github上&…

jquery源码解析:each,makeArray,merge,grep,map详解

jQuery的工具方法&#xff0c;其实就是静态方法&#xff0c;源码里面就是通过extend方法&#xff0c;把这些工具方法添加给jQuery构造函数的。 jQuery.extend({ ...... each: function( obj, callback, args ) { //$.each(arr , function(i,value){}),第三个参数用于…

swift实现提示框第三方库:MBProgressHUD

GitHud的下载地址是&#xff1a;https://github.com/jdg/MBProgressHUD/ 下载完成后&#xff0c;将MBProgressHUD.h和MBProgressHUD.m拖入已经新建好的Swift项目。因为使用的swift语言&#xff0c;所以拖入项目的时候会提示是否新建一个桥接objective-c与swift的文件&#xff…

这段Python代码让程序员赚300W,公司已确认!网友:神操作!

Python到底还能给人多少惊喜&#xff1f;笔者最近看到了这两天关于Python最热门的话题&#xff0c;关于《地产大佬潘石屹学Python的原因》&#xff0c;结果被这个回答惊到了&#xff1a;来源&#xff1a;知乎 https://www.zhihu.com/question/355880221笔者翻了翻那些回答&…

FFmpeg中可执行文件ffmpeg用法汇总

从https://ffbinaries.com/downloads 下载最新的4.1版本的Windows 64位FFmpeg&#xff0c;FFmpeg是一个快速的音频/视频转换工具&#xff0c;FFmpeg可以作为一个命令行程序单独使用。 通过执行以下命令将FFmpeg信息重定位到ffmpeg_help.txt文件中便于查看&#xff0c;其内容如…

下载Ext JS 5.1 gpl版本的方法

先进入官网&#xff1a;http://www.sencha.com然后在导航的Products中选择Sencha Ext JS&#xff0c;会看到以下页面&#xff1a;这时候不要单击Download按钮&#xff0c;而是要单击导航中的DETAILS&#xff0c;页面切换后&#xff0c;就可在底部看到GPL版本的下载按钮了&#…

对MBProgressHUD进行封装并精简使用

几个效果图&#xff1a; 以下源码是MBProgressHUD支持最新的iOS8的版本&#xff0c;没有任何的警告信息 MBProgressHUD.h 与 MBProgressHUD.m MBProgressHUD.hMBProgressHUD.m以下是本人在MBProgressHUD基础上封装的类&#xff0c;觉得部分的使用基于block ShowHUD.h 与 Show…

基于Hash的消息认证码HMAC简介及在OpenSSL中使用举例

HMAC(Hash-based Message Authentication Code)&#xff1a;基于Hash的消息认证码&#xff0c;是一种通过特别计算方式之后产生的消息认证码(MAC)&#xff0c;使用密码散列函数&#xff0c;同时结合一个加密密钥。它可以用来保证数据的完整性&#xff0c;同时可以用来作某个消息…

英特尔发布oneAPI软件计划及beta产品,面向异构计算提供统一可扩展的编程模型

近日&#xff0c;在2019年超级计算大会上&#xff0c;英特尔发布了一项全新软件行业计划oneAPI&#xff0c;助力充分释放高性能计算与人工智能技术融合时代多架构计算的潜力&#xff0c;同时发布了一个oneAPI beta产品。 英特尔oneAPI行业计划&#xff0c;为跨多种包括CPU、GP…

Mac下配置Maven

1.Java环境变量设置就不说。 但是配置Maven需要检查下Java环境变量的设置。需要检查JAVA_HOME环境变量以及Java命令 wanyakundeMacBook-Pro:Library wanyakun$ echo $JAVA_HOME /Library/Java/JavaVirtualMachines/jdk1.7.0_60.jdk/Contents/Home wanyakundeMacBook-Pro:Librar…

UIAlertAction的用法

let alertController UIAlertController(title:"系统提示", message:"您确定要退出程序吗&#xff1f;", preferredStyle: .alert) let cancelAction UIAlertAction(title:"取消", style: .cancel, handler:nil) let okAction UIAlertAction(tit…

在Windows和Linux上编译gRPC源码操作步骤(C++)

gRPC最新发布版本为v1.23.0&#xff0c;下面以此版本为例说明在Windows和Linux下编译过程。 Windows7/10 vs2103编译gRPC源码操作步骤&#xff1a; 1. 需要本机已安装Git、CMake、Perl、Go、yasm&#xff1b; 2. 依次执行如下命令&#xff1a; git clone https://github.co…

这些算法工程师,他们真的是太难了!

现在的算法工程师真的是太难了&#xff01;要让AI会看人眼都分辨不清的医疗影像数据又不够&#xff0c;还得用前沿技术好不容易学会看片&#xff0c;还要让AI会分析病理赋予AI诊断疾病的使命然后几十种模型&#xff0c;N次计算只给一张显卡Boss就问&#xff1a;你打算怎么做&am…

Java 汉子转拼音

1. 引入: pinyin4j-1.1.0 包; http://pan.baidu.com/s/1eQ8a874 2. 转换; private static String ChineseToPinyin(String name){String pinyinName"";char[] nameChar name.toCharArray(); HanyuPinyinOutputFormat defaultFormat new HanyuPinyinOutputFormat()…

Swift - 使用Alamofire通过HTTPS进行网络请求,及证书的使用

&#xff08;本文代码已升级至Swift3&#xff09; 我原来写过一篇文章介绍如何使用证书通过SSL/TLS方式进行网络请求&#xff08;Swift - 使用URLSession通过HTTPS进行网络请求&#xff0c;及证书的使用&#xff09;&#xff0c;当时用的是 URLSession。本文介绍如何使用 Alam…

gRPC简介及简单使用(C++)

gRPC是一个现代的、开源的、高性能远程过程调用(RPC)框架&#xff0c;可以在任何平台运行。gRPC使客户端和服务器端应用程序能够透明地进行通信&#xff0c;并简化了连接系统的构建。gRPC支持的语言包括C、Ruby、Python、Java、Go等。 gRPC默认使用Google的Protocol Buffers&a…

YC中国被撤,陆奇独立运营个人新品牌「奇绩创坛」

整理 | Jane出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;近日&#xff0c;Y Combinator&#xff08;以下简称 YC&#xff09; 发布消息称&#xff0c;YC 将撤回 YC 中国业务与运营&#xff0c;这一品牌也将停止使用&#xff0c;YC的战略布局将调整重新…

shell 脚本逐行读取多个文件,并逐行对应

#!/bin/bashfor i in seq 448doaaased -n "$i"p num.txtbbbsed -n "$i"p text.txt/root/cooper/sms.pl $aaa $bbbdonenum.txt 记录了348个号码text.txt中记录了348个字段效果是取num.txt中第一行作为第一行参数 取text.txt中第一行作为第二个参数num.txt要…

iOS常用知识点1

多线程、特别是NSOperation 和 GCD 的内部原理。 运行时机制的原理和运用场景。 SDWebImage的原理。实现机制。如何解决TableView卡的问题。 block和代理的&#xff0c;通知的区别。block的用法需要注意些什么。 strong&#xff0c;weak&#xff0c;retain&#xff0c;assign&a…

美团BERT的探索和实践 | CSDN原力计划

扫码参与CSDN“原力计划”作者 | 杨扬 佳昊 金刚等来源 | CSDN原力计划作品*点击阅读原文&#xff0c;查看美团技术团队更多干货文章。背景2018年&#xff0c;自然语言处理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09;领域最激动人心的进展莫过于预训练…

程序员的自我修养--链接、装载与库笔记:可执行文件的装载与进程

可执行文件只有装载到内存以后才能被CPU执行。 1. 进程虚拟地址空间 程序和进程有什么区别&#xff1a;程序(或者狭义上讲可执行文件)是一个静态的概念&#xff0c;它就是一些预先编译好的指令和数据集合的一个文件&#xff1b;进程则是一个动态的概念&#xff0c;它是程序运…