相关疑难解决方法(0)

如何在swift 3中设置共享URLCache?

这是我们在Swift 2中的代码.什么是Swift 3版本?我没有看到setShared的替代品.

let sharedCache: NSURLCache = NSURLCache(memoryCapacity: 0, diskCapacity: 0, diskPath: nil)
NSURLCache.setSharedURLCache(sharedCache)
Run Code Online (Sandbox Code Playgroud)

nsurlcache swift3

16
推荐指数
2
解决办法
8008
查看次数

如何设置iOS缓存和磁盘存储大小以及如何在应用终止后从磁盘存储恢复缓存?

我已经问过什么时候从urlcache的内存和磁盘中删除了什么?

现在我还有一些后续问题:

  1. 内存缓存受iPhone的内存(通常为2Gb)限制.但磁盘持久性受到64Gb或128Gb的限制.那是对的吗?

  2. 持久性比内存存储更有意义吗?如果您不想拥有较高的内存占用(并且不希望应用程序从其挂起状态终止),即允许从磁盘存储中恢复缓存然后返回持久结果,它是否有用?

控制点击后,URLCache.shared我看到以下评论:

  • 内存容量:4兆字节(4*1024*1024字节)
  • 磁盘容量:20兆字节(20*1024*1024字节)
  • 磁盘路径:(user home directory)/Library/Caches/(application bundle id)

没有特殊缓存要求或约束的用户应该可以找到可接受的默认共享缓存实例.如果此默认共享缓存实例不可接受,+setSharedURLCache: 则可以调用NSURLCache此实例以设置从此方法返回的其他实例.调用者应该注意确保在没有其他调用者具有对先前设置的共享URL缓存的引用时调用setter.这是为了防止存储缓存数据变得意外无法恢复.

所以我认为我的理由是正确的.


读取/写入/恢复缓存的整个过程如何工作?

  1. 我的意思是当我第一次发出网络请求时,整个响应/错误/数据是否被写入 /存储在缓存中然后进入持久性?

  2. 下次如果我想读取它然后它首先从缓存开始然后如果响应不是陈旧/过期然后它将返回它.磁盘存储没有任何改变.

    如果它已过期,那么它将发出新请求,并且只有在获得成功响应后,它才会清除内存和磁盘的响应,并将新响应写入缓存和磁盘.如果新请求失败,那么它将不会被清除,而是只保留过期/过期数据,所以如果我们想要(加载过期响应)它将从那里加载?

  3. 当应用程序终止时,内存将被刷新.除非设备内存不足或已达到大小限制,否则磁盘存储将保持不变.在下次启动应用程序时,内存会将磁盘存储中的任何内容重新加载到缓存中.

    此缓存恢复将开始加载已存储的最新数据,然后移动到较旧的数据,直到它达到其大小限制或仅到达存储在磁盘上的项目的末尾.对?

  4. 如果在正常的一天,用户在典型的1小时会话中所做的联网数量约为30mb,那么我应该将我的缓存大小设置为20mb和30mb的磁盘存储吗?如果我有图像怎么办?我听说图像的存储方式不同,因为1mb图像可能需要10mb的大小.那我应该怎么做呢?

我问这一切是因为我想改善应用程序中的缓存体验并提高我的整体理解,所以我不会过多地增加应用程序的内存使用量*因此它不会从内存中刷新内存暂停状态由于我的应用程序高内存使用或其他需要的应用程序.


*:我们的一些网络请求将下载缩略图,因此当我增加缓存大小限制时,我需要考虑周到.

memory caching image-caching nsurlcache ios

7
推荐指数
1
解决办法
739
查看次数

标签 统计

nsurlcache ×2

caching ×1

image-caching ×1

ios ×1

memory ×1

swift3 ×1