【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,归档和解档,对于项目开发中如果要存储一些文件,比如图片,音频,视频等文件的时候就需要用到文件存储了.文件沙盒存储主要存储非机密数据,大的数据. ...
随机推荐
- iOS_24_画画板(含取色板)
终于效果例如以下: 一.简单说明 1.使用一个数组 strokesArr(笔画数组)记录全部笔画.数组中保存的是一个个的笔画字典,一个字典就是一个笔画.笔画字典中有三项:笔画的大小.颜色.points ...
- C# - is
Checks if an object is compatible with a given type. An is expression evaluates to true if the pr ...
- bat(批处理文件)初步 第一篇 基本符号
近期我使用的一款软件中须要大量的环境变量设置,而我又不想讲这些变量都加入到系统的环境变量中,一方面是由于有一些同名的库文件的版本号却不一样,都 写在系统环境中会相互干扰:还有一方面则是大部分的路径仅仅 ...
- mysql5.6设置主从报错1236,Increase max_allowed_packet on master,原因却是Binlog偏移量不对
在试Mysql5.6,搭了个主从: CHANGE MASTER TO MASTER_HOST='1.2.3.4', master_user='slave', master_password='xxxq ...
- js 模块化的规范
The Module Pattern,模块模式,也译为模组模式,是一种通用的对代码进行模块化组织与定义的方式.这里所说的模块(Modules),是指实现某特定功能的一组方法和代码.许多现 ...
- COCOFrame
COCOFrame它是一个轻量级的开发框架,综合Android APP开发过程中经常使用的工具,方法,特效.当中F类採用的AndroidQuery实现,做了进一步的封装及部分优化. 1. Jar包大小 ...
- android键盘锁定问题
android经常使用KeyguardLock解锁.但需要使用后打电话reenableKeyguard()锁定被解除.否则,会导致其他进程无法锁定屏幕,使用相同的WakeLock唤醒屏幕后还需要使用r ...
- Tempdb怎么会成为性能瓶颈
原文:Tempdb怎么会成为性能瓶颈 转自:http://blogs.msdn.com/b/apgcdsd/archive/2011/01/25/tempdb.aspx 我曾经遇到过这样一个性能问题. ...
- andriod 在windows配置环境
andriod开发环境配置 个人信息:就读于燕大本科软件project专业 眼下大四; 本人博客:google搜索"cqs_2012"就可以; 个人爱好:酷爱数据结构和算法,希望将 ...
- js调用跨域
web aapi 初体验 解决js调用跨域问题 跨域界定 常见跨域: 同IP不同端口: http:IP:8001/api/user http:IP:8002/api/user 不同IP不同 ...