wkwebview 文件服务器,WKWebView 的缓存策略

2023-10-29

缓存策略有以下四种方式:

默认的NSURLRequest 缓存策略

后台需要做响应头设置,否则无法进行缓存。存在cache目录,n磁盘紧张会被清除

NSURLCache

和上面类似。可以不需要后台设置也能存储。存在cache目录,n磁盘紧张会被清除

下载网页

将整个网页下载下来,正则匹配图片url,下载图片至本地。替换图片URL,创立数据库管理,管理繁琐,细致到每一张图片的增删改。存储目录随意

服务器压缩包

将从服务器下载压缩包,图片资源,css,js等都是相对路径。下载成功后切换,做好对比,就可以做好 存储目录随意

在说存储之前,首先要了解两个类

通过这前两个类来实现离线化

1. 设置NSURLCache

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

//URL缓存设置

NSURLCache *urlCache = [[NSURLCache alloc]initWithMemoryCapacity:25*1024*1024 diskCapacity:100*1024*1024 diskPath:nil];

[NSURLCache setSharedURLCache:urlCache];

return YES;

}

2. 存储离线缓存

在WKWebView中,加载成功后,将此次的请求请求缓存起来

//转换为NSURL类型

NSURL *url = [NSURL URLWithString:self.loadURL];

//WK用于正常加载

self.request =  [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:6];

//得到NSData 数据

NSData *dataContent = [NSData dataWithContentsOfURL:url];

//NSURLCache 实例化

NSURLCache *cache = [NSURLCache sharedURLCache];

//得到相应

NSURLResponse *response = [[NSURLResponse alloc]initWithURL:url MIMEType:@"text/html" expectedContentLength:0 textEncodingName:@"UTF-8"];

//得到CacheURLResponse

NSCachedURLResponse *cacheResponse = [[NSCachedURLResponse alloc]initWithResponse:response data:dataContent];

//进行存储

[cache storeCachedResponse:cacheResponse forRequest:self.request];

在APP目录中,会在Caches目录下以Bundle Identifier为名创建缓存目录。缓存的资源图片,CSS、JS、html等都在这个目录下。

正常加载

[self.wkWebView loadRequest:self.request];

离线加载

NSURLCache *cache = [NSURLCache sharedURLCache];

NSCachedURLResponse  *current = [cache cachedResponseForRequest:self.request];

[self.wkWebView loadData:current.data MIMEType:@"text/html" characterEncodingName:@"UTF-8" baseURL:self.request.URL];

没错,这是核心代码,就这么点。说真的,用到的就这么多,但实际上业务不同,产生的逻辑思路也不同。你会发现存储的目录在Cache下面,如果手机的内存警告,磁盘空间不足,将会被清理掉。对不需要长久持续保持的业务来说,没有什么必要,但需要长久保存的业务来说是致命的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

wkwebview 文件服务器,WKWebView 的缓存策略 的相关文章

  • 如何通过没有直接关系的参数关联两个事物

    通过没有直接关系的参数关联两个事物 可以采用以下几种方法 统计分析 通过收集大量数据 使用统计方法发现两个事物之间的相关性 虽然两个事物之间可能没有直接的因果关系 但通过收集和分析大量的数据 可以发现它们之间存在间接的相关性 可视化分析 通
  • SaltStack 企业级自动化运维实战

    一 SaltStack 概述 1 SaltStack 简介 SaltStack是一个服务器基础架构集中化管理平台 具备配置管理 远程执行 监控等功能 一般可以理解为简化版的puppet和加强版的func SaltStack基于Python语
  • 我是一个线程

    第一回 初生牛犊 我是一个线程 我一出生就被编了个号 0x3704 然后被领到一个昏暗的屋子里 在这里我发现了很多和我一模一样的同伴 我身边的同伴0x6900 待的时间比较长 他带着沧桑的口气对我说 我们线程的宿命就是处理包裹 把包裹处理完
  • 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案...

    给定一个整数数组 nums 和一个整数目标值 target 要求在数组中找出两个整数 使得它们的和为目标值 并返回它们的数组下标 你可以假设每种输入只会对应一个答案 且同一个元素在答案中不能重复出现 你可以按任意顺序返回答案 例如 给定 n
  • Jenkins配置邮件发送测试报告

    我们用jenkins集成测试 Jenkins GitLab Python自动化测试持续集成 构建任务执行完成后 可以将测试结果通过邮件形式发送至相关人员 告知本次项目构建结果 一 开启邮箱SMTP服务 这里我用的是网易163邮箱 登录163
  • Unity 实现 角色的换装

    换装的三个要点 材质 网格 模型 unity中换装 即更改角色部位上的skinnedMeshRender组件的属性 更换mesh mesh 和骨骼的重新绑定 最后更换材质 一个模型 带有skinnedMeshRender组件 的子节点 和对
  • 灰灰-328-LeetCode682棒球比赛(vector、stack、atio()、substr()、c_str()、accumulate())

    你现在是棒球比赛记录员 给定一个字符串列表 每个字符串可以是以下四种类型之一 1 整数 一轮的得分 直接表示您在本轮中获得的积分数 2 一轮的得分 表示本轮获得的得分是前两轮有效 回合得分的总和 3 D 一轮的得分 表示本轮获得的得分是前一
  • SQLPro Studio for Mac(可视化数据库管理工具)

    SQLPro Studio for Mac是一款可视化数据库管理工具 为创建 MySQL MSSQL Oracle和Postgres连接提供支持的数据库管理解决方案 包括SSH隧道功能 SQLPro Studio为您提供了通过相同的用户界面
  • 华为免费虚拟服务器,免费试用虚拟服务器

    免费试用虚拟服务器 内容精选 换一换 本节操作介绍切换虚拟私有云的操作步骤 仅支持单网卡切换虚拟私有云 切换虚拟私有云会导致云服务器网络中断 切换虚拟私有云过程中 请勿操作云服务器的弹性公网IP 或对云服务器做其他操作 切换虚拟私有云后 云
  • OpenCV

    OpenCV Mat类的copyT clone 赋值的区别 1 clone 2 copyTo 3 等号 赋值 4 验证 先说一下Mat类的结构 Mat类我们可以分成两部分 头部分 矩阵数据部分 头部分 用于记录矩阵数据的大小 类型 数据指针
  • 遗传算法的概念和python实现

    遗传算法是一个非常经典的智能算法 主要用于解决优化问题 本文主要简单介绍一些原理 同时给出一个基于python实现的 用于解决实数内优化问题的模板 本文参考 原理 遗传算法入门详解 知乎 简单介绍 遗传算法就是借鉴生物学中的遗传 首先生成若
  • TCP三次握手详解

    一 什么是TCP三次握手 三次握手 Three way Handshake 是指建立一个TCP连接时 需要客户端和服务器总共发送3个包 三次握手的目的是连接服务器指定端口 建立TCP连接 并同步连接双方的序列号和确认号并交换 TCP 窗口大
  • 你不知道的JavaScript---------- 行为委托

    目录 Prototype 机制 面向委托的设计 类理论 委托理论 比较思维模型 JavaScript创建UI控件 控件创建渲染 ES5类继承形式 控件 类 类形式 委托控件对象 委托形式 更简洁的设计 更好的语法 内省 Prototype
  • C++ 条件编译指令和defined 操作符

    使用条件条件编译指令 可以限制程序中的某些内容要在满足一定条件下才参与编译 因此 可以利用条件编译指令使同一个源程序在不同的编译环境下产生不同的目标代码 在头文件中使用 ifdef和 ifndef是非常重要的 可以防止双重定义错误的出现 常
  • centos8安装docker

    执行yum install docker ce会报错Problem package docker ce 3 19 03 3 3 el7 x86 64 requires containerd io gt 1 2 2 3 but none of
  • Android中RecyclerView分页加载数据

    Android中RecyclerView分页加载数据 在Android开发中 RecyclerView是一个强大的视图容器 常用于展示大量数据 当数据量很大时 一次性加载所有数据可能会导致用户等待时间过长或者内存不足的问题 为了解决这个问题
  • 第十一届蓝桥杯 b组

    答案 3880 代码 package 第十一届蓝桥杯 public class Main01 public static void main String args int t 10000 int time 0 boolean b true
  • [深入浅出Cocoa]iOS网络编程之Socket

    深入浅出Cocoa iOS网络编程之Socket 罗朝辉 http blog csdn net kesalin CC 许可 转载请注明出处 更多 Cocoa 开发文章 敬请访问 深入浅出Cocoa CSDN专栏 http blog csdn
  • 表单+初部认识css

    表单

随机推荐

  • python找零钱程序-Python实现的一个找零钱的小程序代码分享

    Python写的一个按面值找零钱的程序 按照我们正常的思维逻辑从大面值到小面值的找零方法 人民币面值有100元 50元 20元 10元 5元 1元 5角 1角 而程序也相应的设置了这些面值 只需要调用函数时传入您想要找零的金额 程序会自动算
  • 本地项目HTTP,加载静态资源却是HTTPS的问题【已解决】

    本地项目HTTP 加载静态资源却是HTTPS的问题 已解决 参考文章 1 本地项目HTTP 加载静态资源却是HTTPS的问题 已解决 2 https www cnblogs com a record p 9067060 html 备忘一下
  • linux桌面卡死解决办法

    切换回命令行 ctl alt f1 重启桌面 sudo service lightdm restart 切换回桌面 ctl alt f
  • Excel 2016图表标题不能输入中文,图表一直闪动

    问题 最近使用excel2016 发现插入图表后 图表一直闪 无法更改标题或者其它操作 如下图所示 解决 依次选择 文件 gt 选项 gt 加载项
  • diff和patch的使用简介

    diff的使用 我们先help看下diff的介绍 Usage diff OPTION FILES Compare FILES line by line Mandatory arguments to long options are mand
  • ContentProvider原理分析

    转载请注明出处 http blog csdn net a992036795 article details 51612425 一 ContentProvider的介绍 关于ContentProvider的介绍 以及使用可以参考我的上一篇博客
  • uni-app基本入门

    目录 1 uni app介绍 2 uni app特点 3 uni app使用方法 3 1安装uni app 可以使用npm安装uni app 也可以直接下载uni app的源代码 3 2创建uni app项目 可以使用HBuilderX等I
  • 【githubshare】开源技术C/C++ 程序设计

    GitHub 上一个开源的 Notion 替代品 AppFlowy IO 完成了个人笔记 知识库 任务管理的功能结合 除了具备 Notion 的基础核心功能外 该项目还支持自托管与离线模式 数据与安全性可控 开发者可任意定制项目模板 插件
  • uni-app多选select组件,兼容多平台小程序、H5

    目录 介绍 平台差异说明 使用方式 安装 引入 基本使用 默认选中项 回显 配置label value对应的key名称 获取点击确认后的结果 完整示例 API Props Option Attributes Slot Events 介绍 多
  • React Router 5.1.0使用useHistory做页面跳转导航

    从React Router v5 1 0开始 新增了useHistory钩子 hook 如果是使用React gt 16 8 0 编写以下函数组件 使用useHistory即可实现编程时页面跳转导航 示例 import useHistory
  • RMQ——支持合并和优先级的消息队列

    业务背景 在某个项目中需要实现一个功能 商品价格发生变化时将商品价格打印在商品主图上面 那么需要在价格发生变动的时候触发合成一张带价格的图片 每一次触发合图时计算价格都是获取当前最新的价格 上游价格变化的因素很多 变化很频繁 下游合图消耗G
  • E-R图转换成关系模式 两个例题 以及ea 画 E-R图过程

    1 画er图 新建项目 注 网上查不到具体建立过程方法 目测是对的 矩形 实体 椭圆 属性 菱形 方法 属性为主码设置 2 两道例题 1 现有论文和作者两个实体 论文实体的属性包括题目 期刊名称 年份 期刊号 作者实体的属性包括姓名 单位
  • 启动SpringBoot后target没有yaml配置文件导致的Bug

    Bug复现 nested exception is org springframework boot autoconfigure jdbc DataSourceProperties DataSourceBeanCreationExcepti
  • JAVA--Collections类

    Collections类概述 Collection接口的实现类 如ArrayList LinkedList本身并没有提供排序 倒置 查找等方法这些方法是由Collections类来实现的 该类有很多public static方法 可以直接对
  • mysql 查询同一个字段同时符合多个不同条件的数据

    使用GROUP BY 去重 使用 HAVING sum gt 2 判断查询出来的数据超过同一字段的查询条件数量 取到同时符合条件的数据 SELECT c FROM goods a INNER JOIN goods category rela
  • 蚂蚁森林快捷指令_iPhone 这样偷蚂蚁森林能量,简直就是开挂

    我发现身边有很大一群人 早上要定两个闹钟 一个是偷能量的 另一个是起床的 而常规的偷能量操作无非是 关闹钟 手动打开支付宝 手动进入蚂蚁森林 但这还是略麻烦 很多人在想 速度能不能再快点 不然我的能量要被偷光了 话说我种完一棵树就弃坑了答案
  • 为什么单线程的Redis能这么快?

    1 为什么是单线程 总结 Redis 的普通 KV 存储瓶颈不在 CPU 而往往可能受到内存和网络 I O 的制约 Redis 中有多种类型的数据操作 甚至包括一些事务处理 如果采用多线程 则会被多线程产生的切换问题而困扰 也可能因为加锁导
  • 算法题---合并两个有序数组(乐乐独记)

    1 题意描述 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2 另有两个整数 m 和 n 分别表示 nums1 和 nums2 中的元素数目 请你合并 nums2 到 nums1 中 使合并后的数组同样按 非递减顺序 排列
  • 用AD组策略------控制客户端本地组

    从安全的角度来说是不建议大家把域用户加入到本地Power Users 写这篇文章的目的是告诉大家 可以通过组策略把域用户和域组自动加入到客户端的本地组 实现对客户端本地组的控制 如果善用此策略可以增加系统的安全性 本地Administrat
  • wkwebview 文件服务器,WKWebView 的缓存策略

    缓存策略有以下四种方式 默认的NSURLRequest 缓存策略 后台需要做响应头设置 否则无法进行缓存 存在cache目录 n磁盘紧张会被清除 NSURLCache 和上面类似 可以不需要后台设置也能存储 存在cache目录 n磁盘紧张会