【Swift】沙盒缓存

/Users/SpongeBob/Library/Developer/CoreSimulator/Devices/5A46B8A4-F547-4B6A-B5B8-F76A6E13998F/data/Containers/Data/Application/02DF6B84-32DF-4082-A7AE-EF4D9A110E42
/Users/SpongeBob/Library/Developer/CoreSimulator/Devices/5A46B8A4-F547-4B6A-B5B8-F76A6E13998F/data/Containers/Bundle/Application/927AB12D-9922-4B00-AAB5-2228FD4025A3/01-BundlePath&HomeDirectory.app
/Users/SpongeBob/Library/Developer/CoreSimulator/Devices/5A46B8A4-F547-4B6A-B5B8-F76A6E13998F/data/Containers/Data/Application/02DF6B84-32DF-4082-A7AE-EF4D9A110E42/tmp/
NSLog(@"%@", [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]);
/Users/SpongeBob/Library/Developer/CoreSimulator/Devices/5A46B8A4-F547-4B6A-B5B8-F76A6E13998F/data/Containers/Data/Application/21231E28-ED5C-4D6E-AE03-A981DDD33CCC/Documents


@IBOutlet weak var imgView: UIImageView!
var str = "https://www.baidu.com/img/bdlogo.png"
// 在Swift中,只需要一行搞定“懒加载”
// 参考: http://swiftist.org/topics/129
lazy var imgCache = NSMutableDictionary()
// lazy var cache : NSMutableDictionary = {
// let dic = NSMutableDictionary()
//
// return dic
// }()
// MARK: lazy load array ???
// lazy var name: String = "Spongebob"
// var arr: NSArray {
// get {
// return NSArray()
// }
// }
/// 将网络图片缓存到本地沙盒
func downloadPicToCache() {
println("网络下载图片")
var urlPic = NSURL(string: str)
var data = NSData(contentsOfURL: urlPic!)
var image = UIImage(data: data!)
self.imgView.image = image
// 写入沙盒
if data != nil {
println((str as NSString).appendCacheDir())
data?.writeToFile((str as NSString).appendCacheDir(), atomically: true);
}
}
2、加载图片
/// 加载网络图片
func loadImg() {
var img = UIImage(contentsOfFile: (str as NSString).appendCacheDir())
if self.imgCache[str] != nil {
println("从内存中加载图片")
self.imgView.image = self.imgCache[str] as? UIImage
} else {
if img != nil {
println("从沙盒(磁盘)加载图片")
println((str as NSString).appendCacheDir())
// 将图片添加到图片缓冲池中
self.imgCache.setObject(img!, forKey: str)
self.imgView.image = img
} else {
downloadPicToCache()
}
}
}
3、这里为NSString写了一个分类(为了拼接沙盒路径地址)
/*
/// 拼接文档目录
- (NSString *)appendDocumentDir;
/// 拼接缓存目录
- (NSString *)appendCacheDir;
/// 拼接临时目录
- (NSString *)appendTmpDir;
*/
- (NSString *)appendDocumentDir {
NSString *dir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
// stringByAppendingPathComponent拼接时,会自动加上反斜杠"/"
// self为字符串本身,lastPathComponent获取文件路径最后的字符串!
return [dir stringByAppendingPathComponent:self.lastPathComponent];
}
- (NSString *)appendCacheDir {
NSString *dir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
return [dir stringByAppendingPathComponent:self.lastPathComponent];
}
- (NSString *)appendTmpDir {
return [NSTemporaryDirectory() stringByAppendingPathComponent:self.lastPathComponent];
}
源码分享:https://github.com/SpongeBob-GitHub/Sandbox_Caches
Swift懒加载,参考:http://swiftist.org/topics/129
【Swift】沙盒缓存的更多相关文章
- iOS篇之有沙盒缓存
内存指的就是主板上的存储部件,是CPU直接与之沟通,并用其存储数据的部件,存放当前正在使用的(即执行中)的数据和程序,它的物理实质就是一组或多组具备数据输入输出和数据存储功能的集成电路,内存只用于暂时 ...
- ionic项目打包好Xcode工程,模拟器运行各种沙盒缓存目录
用ionic开发好的app,build好iOS端可用的Xcode工程,然后用模拟器跑起来.研究一下js写的代码做本地持久化时,不同类型的文件都放在那里了. cordova-plugin-sqliteS ...
- 69.查看APP沙盒缓存的内容文件
第一步:链接真机设备,点击Xcode ,按command+shift+2 弹出电脑所运行的APP列表 第二步:选中你需要查看的APP,点击最下面! 类似于设置图标的按钮! 点击第二个Download ...
- IOS- 网络图片缓存到沙盒中 ,离线取出。
一.缓存图片 //1.首先创建在沙盒中创建一个文件夹用于保存图片 NSFileManager *fileManager = [[NSFileManager alloc] init]; NSString ...
- IOS 沙盒与清除缓存
SandBox,沙盒机制,是一种安全体系.我们所开发的每一个应用程序在设备上会有一个对应的沙盒文件夹,当前的程序只能在自己的沙盒文件夹中读取文件,不能访问其他应用程序的沙盒.在项目中添加的所有非代码的 ...
- iOS开发——数据持久化Swift篇&(二)沙盒文件
沙盒文件 //******************** 5.2 文件操作 func use_FileOperations() { //1.获取程序的Home目录 let homeDirectory = ...
- Swift iOS 文件操作:沙盒(SandBox)、程序包(NSBundle)
1.沙盒机制介绍 iOS 中的沙盒机制(SandBox)是一种安全体系.每个 iOS 应用程序都有一个单独的文件系统(存储空间),而且只能在对应的文件系统中进行操作,此区域被称为沙盒.所有的非代码文件 ...
- Swift之沙盒与数据存储
应用沙盒结构分析 1.应用程序包:包含了所有的资源文件和可执行文件 2.Documents:保存应用运行时生成的需要持久化的数据,iTunes同步设备时会备份该目录 3.tmp:保存应用运行时所需要的 ...
- IOS数据存储之文件沙盒存储
前言: 之前学习了数据存储的NSUserDefaults,归档和解档,对于项目开发中如果要存储一些文件,比如图片,音频,视频等文件的时候就需要用到文件存储了.文件沙盒存储主要存储非机密数据,大的数据. ...
随机推荐
- EL字符串表达式和常用功能用途拦截
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> ${wj ...
- jQuery 有条件排序
尊重劳动成果,转载请注明出处(http://blog.csdn.net/sllailcp/article/details/41011173)... 点击button,表格里就会依照分数的高低.将学生信 ...
- wpf 9张图片的连连看
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...
- JS基础——函数的创建和使用
在JS中函数在使用时实质上和我们平时学习的编程语言中的函数类似,它相同也具有函数名,參数,返回值,函数体等这些寻常函数所具有的内容.可是作为一种脚本语言,它确实也有自己不一样的地方. 一.创建 < ...
- 分散式-ubuntu12.04安装hadoop1.2.1
在hadoop1.2.1被预装在一份报告中安装说明java.我装了很多的版本号java以及许多的版本号hadoop,然后发现oracle-java7与hadoop1.2.1能够匹配. 一,安装详细过程 ...
- iPhone&iPad DFU及恢复模式刷机、降级教程
再次提醒,刷机需慎重处理. http://blog.csdn.net/ztp800201/article/details/11980643 iphone一共同拥有三种工作模式,各自是正常模式,恢复模式 ...
- 如何使用autolayout的UIView加入动画
hi,all: 在经过了一番犹豫之后,我决定将我自己做的这个小APP的源代码发布给大家: 其出发点是和大家一起学习iOS开发,仅供学习參考之用. 之前代码是托管与gitlab 上的.今天我将其pull ...
- Java读书笔记三(字符串)
1.介绍 本篇博客将对JAVA中的字符串类的基本知识进行介绍.主要字符串类的一些经常用法等内容. 2.字符串对象的创建 1.有两种形式.可是在开发中常常习惯于String 变量名的形式来进行操作. & ...
- ASP.Net中使用XMLDataSource
在Web开发中,程序和数据库打交道是常有的事情.在平时使用过程中,使用较多的是MS SQLSERVER,因此经常用到SQLDataSource将数据绑定的数据控件上.有时数据量较小,无需要在数据库中创 ...
- android开源应用(主要是博客上带有分析的)收集 【持续更新】
2014.5.24更新: (android高仿系列)今日头条 http://blog.csdn.net/vipzjyno1/article/details/26514543 CSDN Andro ...