【Swift】沙盒缓存

本地sandbox缓存目录

沙盒の 主目录:

po NSHomeDirectory()

/Users/SpongeBob/Library/Developer/CoreSimulator/Devices/5A46B8A4-F547-4B6A-B5B8-F76A6E13998F/data/Containers/Data/Application/02DF6B84-32DF-4082-A7AE-EF4D9A110E42

沙盒の bundle(*.app包) 路径:

po [[NSBundle mainBundle] bundlePath]

/Users/SpongeBob/Library/Developer/CoreSimulator/Devices/5A46B8A4-F547-4B6A-B5B8-F76A6E13998F/data/Containers/Bundle/Application/927AB12D-9922-4B00-AAB5-2228FD4025A3/01-BundlePath&HomeDirectory.app

沙盒の Tmp 路径

po NSTemporaryDirectory()

/Users/SpongeBob/Library/Developer/CoreSimulator/Devices/5A46B8A4-F547-4B6A-B5B8-F76A6E13998F/data/Containers/Data/Application/02DF6B84-32DF-4082-A7AE-EF4D9A110E42/tmp/

沙盒の document 路径

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

注释:

5A46B8A4-F547-4B6A-B5B8-F76A6E13998F (模拟器)设备的UUID --不可改变

02DF6B84-32DF-4082-A7AE-EF4D9A110E42 (应用程序)*.app 的UUID --随机生成

Objc:

 Swift:

0、变量的声明 & Swift中延迟的加载

    @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()
//        }
//    }

1、网络下载图片,缓存到本地沙盒

    /// 将网络图片缓存到本地沙盒
    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

时间: 2024-10-14 03:10:35

【Swift】沙盒缓存的相关文章

cell下载图片思路 – 无沙盒缓存

cell下载图片思路 – 无沙盒缓存 /** *  1.会阻塞主线程 - 影响用户体验 *  2.重复下载 - 浪费流量,浪费时间,影响用户体验 */ // 保证:1张图片只下载1次 /** * 所有的应用数据 */ @property(nonatomic,strong)NSMutableArray*apps; /** * 存放所有下载操作的队列 */ @property(nonatomic,strong)NSOperationQueue*queue; /** * 存放所有的下载操作(url是k

无沙盒缓存原理

无沙盒缓存原理:主要由两部分组成 1.内存图片缓存 2.内存操作缓存

ionic项目打包好Xcode工程,模拟器运行各种沙盒缓存目录

用ionic开发好的app,build好iOS端可用的Xcode工程,然后用模拟器跑起来.研究一下js写的代码做本地持久化时,不同类型的文件都放在那里了. cordova-plugin-sqliteStorage插件创建的数据库的在沙盒中文件位置,默认使用参数default. p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #454545 } /Users/userName/Li

69.查看APP沙盒缓存的内容文件

第一步:链接真机设备,点击Xcode ,按command+shift+2  弹出电脑所运行的APP列表 第二步:选中你需要查看的APP,点击最下面! 类似于设置图标的按钮! 点击第二个Download Container ,将需要下载的 点击下载到桌面 第三步:将下载的后缀为xcappdata的文件,点击 右键 显示包内容,查看对应的沙盒文件 原文地址:https://www.cnblogs.com/qiangzheVSruozhe/p/9929853.html

iOS开发日记14-NSFileManager(沙盒和清除缓存)

今天博主有一个文件管理的需求,遇到了一些困难点,在此和大家分享,希望能够共同进步. iOS的沙盒机制,应用只能访问自己应用目录下的文件.iOS不像Android,没有SD卡概念,不能直接访问图像.视频等内容.iOS应用产生的内容,如图像.文件.缓存内容等都必须存储在自己的沙盒内.默认情况下,每个沙盒含有3个文件夹:Documents, Library 和 tmp.Library包含Caches.Preferences目录. Documents:苹果建议将程序创建产生的文件以及应用浏览产生的文件数

图片缓存到沙盒(自定义的方法,适合已经取得UIImage对象时候使用)

首先是一个MD5加密的类,将图片的绝对或相对路径用MD5加密,因为路径中有很多"/",直接存储会有问题 首先要导入头文件 #import <CommonCrypto/CommonCrypto.h> 然后是封装的MD5加密的方法 + (NSString *)md5:(NSString *)str { const char *cStr = [str UTF8String]; unsigned char result[16]; CC_MD5(cStr, (unsigned int

iOS App沙盒模型文件目录详解Swift版

本文会比较全面的介绍iOS App沙盒模型的文件夹及其使用场景,以及通过swift取得这些文件夹的方法 iOS 中的沙盒机制介绍 iOS 中的沙盒机制(SandBox)是一种安全体系.每个 iOS 应用程序都有一个单独的文件系统(存储空间),而且只能在对应的文件系统中进行操作,此区域被称为沙盒.所有的非代码文件都要保存在此,例如属性文件 plist.文本文件.图像.图标.媒体资源等. iPhone沙箱模型的四个文件夹介绍和功能 1.Documents 目录:您应该将所有de应用程序数据文件写入到

关于数据保存的方式(沙盒,解档归档(swift方法))

/// 保存用户信息(保存在沙盒中) - (void)saveUserInfo { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; // iOS 8.0 会直接写入沙盒,无需再使用 `[defaults synchronize];` [defaults setObject:self.username forKey:SKUsernameKey]; [defaults setObject:self.pwd forKe

iOS开发——数据持久化Swift篇&amp;(二)沙盒文件

沙盒文件 1 //******************** 5.2 文件操作 2 func use_FileOperations() 3 { 4 //1.获取程序的Home目录 5 let homeDirectory = NSHomeDirectory() 6 println(homeDirectory) 7 8 9 //2.获取Documents目录 10 let documentPaths = NSSearchPathForDirectoriesInDomains(NSSearchPathD