iT邦幫忙

2024 iThome 鐵人賽

DAY 23
0
Mobile Development

自己的 app 自己寫系列 第 23

[Day23] 明明還沒到冬天台北怎麼開始下雨了

  • 分享至 

  • xImage
  •  

接下來的幾天好像有可能一直下雨呢有夠悲劇,搬離台北太久都快忘了冬天被濕氣籠罩的恐懼了。


亂看時發現了 apple 的另一個 tutorial,內容看起來比之前只講 swift UI 的詳細很多,甚至還有 macOS 開發相關,必須先丟入收藏夾裡存起來。

cache 是很常見的技術,不只應用層,系統層也經常用這個技巧來優化效能,而iOS 當然也不例外。

其中一個 cache 方式就是 NSCache,使用方式像下面所示。NSCache 會自動管理 cache,可以設定 cache object 的數量和大小,如果 cache 量太多時會自動進行清理。

let cache = NSCache<NSString, UIImage>()
cache.setObject(image, forKey: "imageKey")
let cachedImage = cache.object(forKey: "imageKey")

URL Cache 也是一種,如名字所示,會把 URL request 去對應到 cache 起來的 response object,這個還提供了 in-memory 和 on-disk 的 cache。如果要儲存 cache 的話,會複寫 storeCacheResponse,拿取時使用 getCachedResponse,移除掉 cache 則用 removeCachedResponse。

let cache = URLCache(memoryCapacity: 512 * 1024, diskCapacity: 10 * 1024 * 1024, diskPath: "myCache")

下面則是官網的使用範例:

func urlSession(_ session: URLSession, dataTask: URLSessionDataTask,
                willCacheResponse proposedResponse: CachedURLResponse,
                completionHandler: @escaping (CachedURLResponse?) -> Void) {
    if proposedResponse.response.url?.scheme == "https" {
        let updatedResponse = CachedURLResponse(response: proposedResponse.response,
                                                data: proposedResponse.data,
                                                userInfo: proposedResponse.userInfo,
                                                storagePolicy: .allowedInMemoryOnly)
        completionHandler(updatedResponse)
    } else {
        completionHandler(proposedResponse)
    }
}

上一篇
[Day22] 韓國人是不是特別會拍綜藝
下一篇
[Day24] 好像有些人週五請假
系列文
自己的 app 自己寫30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言