【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,归档和解档,对于项目开发中如果要存储一些文件,比如图片,音频,视频等文件的时候就需要用到文件存储了.文件沙盒存储主要存储非机密数据,大的数据. ... 
随机推荐
- ZOJ Monthly, October 2010 ABEFI
			ZOJ 3406 Another Very Easy Task #include <cstdio> #include <cstring> const int N = 10000 ... 
- [LeetCode179]Largest Number
			题目: Given a list of non negative integers, arrange them such that they form the largest number. For ... 
- DMA为什么比轮询、中断方式性能要卓越非常多?(你不懂)
			本文原创为freas_1990,转载请标明出处:http://blog.csdn.net/freas_1990/article/details/35735397 假设是计算机专业出身的同学,都听过一个 ... 
- MVC模式编程演示样本-登录认证(静态)
			好,部分博客分享我的总结JSP-Servlet-JavaBean思想认识和三层编程模型的基本流程,ZH- CNMVC该示例实现演示的编程模式-登录身份验证过程,在这里,我仍在使用静态验证usernam ... 
- poj 3237 Tree(树链拆分)
			题目链接:poj 3237 Tree 题目大意:给定一棵树,三种操作: CHANGE i v:将i节点权值变为v NEGATE a b:将ab路径上全部节点的权值变为相反数 QUERY a b:查询a ... 
- 【Android基础】Activity之间进行参数传递的三种方式
			1.使用Intent进行传输 //发送数据的Activity class button implements OnClickListener{ @Override public void onClic ... 
- cocos2D(五岁以下儿童)---- CCNode
			本将主要介绍下CCNode这个类.CCNode是全部节点的基类,当中包含我们经常使用的CCScene(场景).CCLayer(图层).CCSprite(精灵)等.它是一个不可以可视化显示的抽象类,仅仅 ... 
- 编hadoop-1.X源代码
			满足需要在不久的将来windows调试Linux下一个hadoop问题,Linux检查时需要的文件权限.和windows在没有必要,因此,有必要修改hadoop源代码,再次编译,过程例如以下: (1) ... 
- Android学习路径(七)建立Action Bar
			在action bar最今本的形式中,它只在左边展示了activity的标题以及应用的icon. 即使在这样的简单的形式中,它也不过告诉用户如今在应用的哪个activity中,同一时候为你的应用保持一 ... 
- 蓝牙4.0BLE cc2540 cc2541 ios OAD课程(空中固件升级)[原版的,多图]
			蓝牙4.0BLE cc2540 cc2541 ios OAD课程(件) 为阿莫单片机论坛 www.AmoMcu.com 原创.仅仅公布于csdn博客, 如需转载,请注明出处,谢谢! ... 
