尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
3种内置存储对比详解:Shallows MemoryStorage、DiskStorage 与 NSCacheStorage 实战指南
3种内置存储对比详解Shallows MemoryStorage、DiskStorage 与 NSCacheStorage 实战指南【免费下载链接】Shallows Your lightweight persistence toolbox项目地址: https://gitcode.com/gh_mirrors/sh/ShallowsShallows是一款面向 Swift 开发者的轻量级持久化工具箱lightweight persistence toolbox它通过StorageKey, Value这一统一抽象把内存、磁盘、系统缓存三种存储方式封装成可互相组合的组件。本文带你一次看懂它内置的三种存储MemoryStorage、DiskStorage与NSCacheStorage的工作原理、适用场景与实战选择方法。为什么需要 3 种内置存储在 iOS/macOS 开发中数据存取通常面临三个矛盾速度内存最快、持久性磁盘才不掉、容量管理内存满了要能自动淘汰。Shallows 的设计思路是每种内置存储解决一个核心矛盾再通过组合Composition把它们串成多级缓存。三种存储的定位一表看懂存储类型数据存哪里应用重启后还在吗会自动淘汰吗一句话定位MemoryStorage进程内存字典❌ 丢失❌ 不会最快的内存缓存DiskStorage磁盘文件✅ 保留❌ 不会掉电不丢的持久化NSCacheStorage系统 NSCache❌ 丢失✅ 系统自动系统托管的内存缓存MemoryStorage最快的内存缓存MemoryStorage的实现非常纯粹底层就是一个线程安全的字典ThreadSafe[Key: Value]借助并发队列的 barrier 标志保证多线程读写安全源码见 MemoryStorage.swift。let storage MemoryStorageString, Int().asStorage() // StorageString, Int storage.set(10, forKey: some-key) { _ in } storage.retrieve(forKey: some-key) { result in if let value try? result.get() { print(value) } }特点与注意点⚡ 读写都是纯内存操作速度最快适合高频访问的热点数据 Key 要求HashableValue 可以是任意 Swift 类型⚠️ 数据只存活于进程内App 终止即清空且没有容量上限需自行控制写入量查不到数据时返回MemoryStorageError.noValue错误可配合defaulting(to:)兜底DiskStorage掉电不丢的磁盘持久化DiskStorage基于文件系统实现是所有内置存储中唯一真正持久的一个。它的核心是一个串行队列QoS 为.userInitiated读写操作异步执行、不会阻塞主线程详见 DiskStorage.swift。实际使用时推荐通过folder工厂方法拿到文件夹级存储let diskStorage DiskStorage.main.folder(cities, in: .cachesDirectory) .mapJSONObject(City.self) // StorageFilename, City diskStorage.set(kharkiv, forKey: kharkiv)实用细节 默认自动创建目录creatingDirectories: true写入前会自动补齐不存在的父目录 文件名默认用 Base64 编码器转换避免特殊字符问题可通过filenameEncoder自定义 调用clear()可一键清空整个文件夹设置clearsOnDeinit true后对象销毁时自动清理适合做临时磁盘缓存 速度受磁盘 IO 限制不适合每次都从磁盘读——这正是组合用法的意义NSCacheStorage享受系统自动淘汰的内存缓存NSCacheStorage是对系统NSCache的封装源码位于 NSCacheStorage.swift。相比MemoryStorage它最大的优势是系统会在内存紧张时自动淘汰对象不会把 App 撑爆。它有一个坑需要注意NSCache只支持引用类型ObjC 对象所以 Key 和 Value 必须是NSObject/AnyObject类型。Shallows 贴心地提供了一组便捷扩展来桥接 Swift 原生类型let nscache NSCacheStorageNSURL, NSData() .toNonObjCKeys() .toNonObjCValues() // StorageURL, DatatoNonObjCKeys()和toNonObjCValues()支持NSURL/URL、NSData/Data、NSDate/Date、NSIndexPath/IndexPath等常见类型对如NSString → String几行链式调用就能拿到纯 Swift 类型的存储。适用场景缓存图片二进制数据、大对象等丢了可以再取的数据让系统帮你管理内存压力。实战选择3 种存储怎么选结合三者特性选择逻辑其实很简单你的需求推荐存储理由会话内的临时状态、计数器等MemoryStorage极快进程内存活足够用户数据、配置、下载内容DiskStorage必须跨重启保留图片等大对象、内存敏感场景NSCacheStorage系统自动淘汰防 OOM不确定 / 想要最优体验组合起来兼顾速度 持久性组合玩法一行代码搭出多级缓存 Shallows 最强的能力是把存储组合Composition 实现见 Composition.swift。经典的内存 磁盘二级缓存只需一行let efficient MemoryStorageFilename, UIImage().combined(with: imageStorage)这一行代码背后做了三件事读取时先查MemoryStorage命中即返回快内存未命中则落到DiskStorage读取并回写到内存供下次加速写入时同时写入内存和磁盘保证两边一致除combined(with:)外还有两种更精细的组合方式定义在 Storage.swift 与 Composition.swiftbacked(by:)读取时回退到后端存储但写入不推给后端pushing(to:)读取只查前端存储写入时推送到后端对于只读或只写场景还可以用asReadOnlyStorage()/asWriteOnlyStorage()进一步收窄接口权限。小结选对存储事半功倍 要速度→MemoryStorage纯内存字典 线程安全队列要持久→DiskStorage串行异步 IO自动建目录、可一键清理要省心→NSCacheStorage系统级自动淘汰配合桥接扩展摆脱 ObjC 类型限制都要→ 用combined(with:)组合出多级缓存这正是 Shallows 轻而可组合的设计精髓理解了这三种内置存储的边界与组合方式你就掌握了构建高效缓存/持久化方案的完整工具箱 ️。【免费下载链接】Shallows Your lightweight persistence toolbox项目地址: https://gitcode.com/gh_mirrors/sh/Shallows创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

如何用Windows 11 Debloater安全卸载Microsoft Edge?停止自动更新与服务禁用完整指南

如何用Windows 11 Debloater安全卸载Microsoft Edge?停止自动更新与服务禁用完整指南

如何用Windows 11 Debloater安全卸载Microsoft Edge?停止自动更新与服务禁用完整指南 【免费下载链接】windows-11-debloat Script to optimize your installation of Windows 11. 项目地址: https://gitcode.com/gh_mirrors/wi/windows-11-debloat Windows …

📅 2026/10/31 6:54:35
【AI大模型】本周大模型新动向:自动幻觉检测、多智能体强化学习、多模态数据压缩

【AI大模型】本周大模型新动向:自动幻觉检测、多智能体强化学习、多模态数据压缩

01、Token Sequence Compression for Efficient Multimodal Computing 大型多模态模型(LMMs)的指数级增长推动了跨模态推理的发展,但带来了巨大的计算成本。本文聚焦于视觉语言模型,指出当前视觉编码器的冗余和低效,并…

📅 2026/10/28 3:33:05
Qwen微调干货!对话、指令、Function Call、思考链数据集构造全流程揭秘!

Qwen微调干货!对话、指令、Function Call、思考链数据集构造全流程揭秘!

前言 在大模型微调的实践中,如何构建和选择微调数据集,是决定微调效果最关键的因素之一。目前,社区已经积累了大量优秀的微调框架和开放数据集。在很多通用场景中,开发者只需按需组合不同的框架与数据集,就能完成基础微…

📅 2026/10/28 0:42:53
MORE NEWS

更多资讯

📰

电工证复习条件多少钱能考下来,急需特种作业证才能上岗找工作

电工证复习条件多少钱能考下来,急需特种作业证才能上岗找工作 你还在为找不到电工证复习资料发愁?别再等了,特种作业证就是你找工作的敲门砖,而 电工证复习条件 和 多少钱…

📰

电工证复习必须搞懂的3个问题,含金量还在吗?

电工证复习必须搞懂的3个问题,含金量还在吗? 之前考的证在外省能不能转过来?这几乎是每个电工从业者在换城市、换岗位时都会问的问题。说实话,很多人考了证,却对它的实际作用和后续操作一知半解,尤其在面对复审、延期、转证等问题时更是摸不着头脑。今…

📰

弱电电工证需要去哪考 一位郑州金水区电工的真实经历

弱电电工证需要去哪考 一位郑州金水区电工的真实经历 刚毕业那会儿,我在郑州金水区找了份弱电安装的兼职,结果第一天上班就被叫去办公室谈话,说必须要有 弱电电工证…

📰

电工证考试有哪些科目全流程办理指南 值不值得考

电工证考试有哪些科目全流程办理指南 值不值得考 之前考的证在外省能不能转过来?这是很多人在考电工证前最关心的问题,特别是像我们这种常年在外跑工地、带班组的人,证书的通用性直接影响到我们能不能顺利接项目、上工。今天就来聊聊…

📰

泰州高压电工证补助怎么拿?考前押题能帮你避开这些坑

泰州高压电工证补助怎么拿?考前押题能帮你避开这些坑 怕考不过白交培训费?泰州高压电工证补助虽然不是强制要求,但对从业者来说,是一笔实实在在的补贴。不少电工在报考前都担心“钱花了证没拿到”,再加上泰州高压电工证补助政策并不为人熟知,很多人甚至…

📰

电工证读卡器图片怎么报名?洛阳市政从业者必看的5个关键问题

电工证读卡器图片怎么报名?洛阳市政从业者必看的5个关键问题 你现在手上没个电工证,连工地都进不去,更别提找份体面的工作了。电工证是特种作业的“通行证”,尤其是像洛阳这种市政工程大市,对电工证的需求简直像呼吸一样频繁。你可能现在就想知道:…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬