尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

如何为 URLEmbeddedView 编写自定义缓存?OGDataCacheManagerProtocol 完整教程

如何为 URLEmbeddedView 编写自定义缓存?OGDataCacheManagerProtocol 完整教程 如何为 URLEmbeddedView 编写自定义缓存OGDataCacheManagerProtocol 完整教程【免费下载链接】URLEmbeddedViewURLEmbeddedView automatically caches the object that is confirmed the Open Graph Protocol.项目地址: https://gitcode.com/gh_mirrors/url/URLEmbeddedViewURLEmbeddedView 是一款 iOS / tvOS 端的 Open GraphOGP数据卡片展示库输入一个 URL 就能自动抓取网页标题、描述和封面图并自动缓存 Open Graph 数据。它的默认缓存基于 Core Data但如果你希望用内存缓存、文件缓存或自己的数据库只需实现OGDataCacheManagerProtocol这一个协议就能无缝替换缓存层 ️为什么要自定义缓存URLEmbeddedView 内部的数据流是这样的默认缓存管理器OGDataCacheManager使用 Core Data把每条 OGP 记录存进 Documents 目录下的URLEmbeddedViewOGData.sqlite默认 10 天更新一次官方也提供了OGDataNoCacheManager可以直接关掉数据缓存每次请求都走网络而如果你想做仅内存缓存、按域名分组缓存或接入 SQLite/Realm就要亲自实现缓存协议。这三者都实现同一个协议所以替换起来只需一行代码。认识 OGDataCacheManagerProtocol 的 5 个必备方法协议定义在 OGDataCacheManagerProtocol.swift它要求你的缓存类提供 5 个成员objc public protocol OGDataCacheManagerProtocol: NSObjectProtocol { var updateInterval: TimeInterval { get set } func fetchOrInsertOGCacheData(url: String, completion: escaping (OGCacheData) - ()) func fetchOGCacheData(url: String, completion: escaping (OGCacheData?) - ()) func updateIfNeeded(cache: OGCacheData) func deleteOGCacheDate(cache: OGCacheData, completion: ((Error?) - Void)?) }每个方法的职责很直观方法作用updateInterval缓存有效期秒到期后才会重新请求网络fetchOrInsertOGCacheData查询缓存没有则插入一条空记录并返回fetchOGCacheData只读查询没有缓存时回调nilupdateIfNeeded网络拿到新数据后把结果写回缓存deleteOGCacheDate删除指定 URL 的缓存记录缓存的载体是OGCacheData类见 OGCacheData.swift它包装了一个OpenGraph.Data对象并带有createDate和updateDate两个时间戳——updateDate为nil时表示这条缓存还没有真实数据必须走网络请求。三步写出一个内存缓存管理器下面用最常见的内存缓存场景演示完整流程。第一步定义类并继承 NSObject因为协议带有objc标注你的类需要继承NSObjectfinal class MemoryCacheManager: NSObject, OGDataCacheManagerProtocol { private var storage: [String: OGCacheData] [:] var updateInterval: TimeInterval 0 }第二步实现 5 个方法fetchOrInsertOGCacheData先查字典没有就插入一条updateDate为nil的空记录fetchOGCacheData直接返回字典中的值可能为nilupdateIfNeeded如果新数据的updateDate有值就覆盖旧记录deleteOGCacheDate按sourceUrl删除后回调completion(nil)updateInterval直接暴露一个可读写属性即可。官方自带的 OGDataNoCacheManager.swift 就是一个什么都不存的极简参考实现实现逻辑几乎为零适合抄作业。第三步一行代码替换默认缓存替换入口在数据提供器上OGDataProvider的cacheManager属性是公开的见 OGDataProvider.swift// 换成你自己的内存缓存 OGDataProvider.shared.cacheManager MemoryCacheManager() // 或者官方自带的完全不用缓存 OGDataProvider.shared.cacheManager OGDataNoCacheManager() // 顺带调整缓存有效期默认 10 天 OGDataProvider.shared.updateInterval 10.days设置完成后fetchOGData(withURLString:)的整个调用链会自动使用你的实现界面层URLEmbeddedView的代码一行都不用改 ✅缓存过期判断的运作机制替换缓存管理器后理解一下过期策略能帮你少踩坑。OGDataProvider内部的处理逻辑见 OGDataProvider.swift调用fetchOrInsertOGCacheData拿到缓存记录如果updateDate距今小于updateInterval直接返回缓存不发请求否则发起网络下载成功后调用updateIfNeeded把新数据写回你的缓存下载失败时若已有旧数据则返回旧数据兜底保证界面永远有内容可显示。所以你的自定义实现里updateDate的读写逻辑是核心——写错它缓存要么永远不过期要么每次都打网络。关键文件速查清单 协议定义OGDataCacheManagerProtocol.swift默认 Core Data 缓存OGDataCacheManager.swift无缓存管理器OGDataNoCacheManager.swift缓存数据模型OGCacheData.swift缓存过期调度逻辑OGDataProvider.swiftCore Data 模型URLEmbeddedViewOGData.xcdatamodel/contents官方示例工程OGSampleViewController.swift小结为 URLEmbeddedView 编写自定义缓存的完整路径就是实现OGDataCacheManagerProtocol→ 把类实例赋给OGDataProvider.shared.cacheManager。协议方法虽多但每个方法职责单一配合官方的OGDataNoCacheManager和 Core Data 默认实现对照着写一个内存级缓存管理器通常半小时就能落地。【免费下载链接】URLEmbeddedViewURLEmbeddedView automatically caches the object that is confirmed the Open Graph Protocol.项目地址: https://gitcode.com/gh_mirrors/url/URLEmbeddedView创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表