URLCache

Groot·2022년 8월 24일
0

TIL

목록 보기
44/148
post-thumbnail

TIL

🌱 난 오늘 무엇을 공부했을까?

📌 URLCache - 공식문서

  • URL 요청을 캐시된 응답 개체에 매핑하는 개체.

📍 Declaration

class URLCache : NSObject

📍 Overview

  • URLCache 클래스는 NSURLRequest 개체를 CachedURLResponse 개체에 매핑하여 URL 로드 요청에 대한 응답 캐싱을 구현합니다.
  • 메모리 및 디스크 상의 복합 캐시를 제공하며 메모리 및 디스크 부분의 크기를 모두 조작할 수 있습니다.
  • 캐시 데이터가 영구적으로 저장되는 경로를 제어할 수도 있습니다.

    iOS에서 온디스크 캐시는 시스템의 디스크 공간이 부족할 때 제거될 수 있지만 앱이 실행되고 있지 않을 때만 가능합니다.

📍 Thread Safety

  • iOS 8 이상 및 macOS 10.10 이상에서 URLCache는 스레드로부터 안전합니다.
  • URLCache 인스턴스 메서드는 동시에 여러 실행 컨텍스트에서 안전하게 호출할 수 있지만, cachedResponse(for:) 및 storeCachedResponse(_:for:)와 같은 메소드에는 동일한 요청에 대한 응답을 읽거나 쓰려고 할 때 피할 수 없는 Race Condition이 있습니다.
  • URLCache의 하위 클래스는 이러한 스레드로부터 안전한 방식으로 재정의된 메서드를 구현해야 합니다.

📍 Subclassing Notes

  • URLCache 클래스는 있는 그대로 사용하기 위한 것이지만 특정 요구 사항이 있을 때 하위 클래스로 지정할 수 있습니다.
  • 예를 들어, 캐시된 응답을 선별하거나 보안 또는 기타 이유로 스토리지 메커니즘을 다시 구현하려고 할 수 있습니다.
  • 이 클래스의 메서드를 재정의할 때 작업 매개 변수를 사용하는 메서드가 그렇지 않은 메서드보다 시스템에서 선호된다는 점에 유의하십시오. 따라서 다음과 같이 서브클래싱할 때 작업 기반 메서드를 재정의해야 합니다.
    • 캐시에 응답 저장 — Override the task-based storeCachedResponse(_:for:), instead of or in addition to the request-based storeCachedResponse(_:for:).
    • 캐시에서 응답 받기 Override getCachedResponse(for:completionHandler:), instead of or in addition to cachedResponse(for:).
    • 캐시된 응답 제거 — Override the task-based removeCachedResponse(for:), instead of or in addition to the request-based removeCachedResponse(for:).

📍 Topics

🔗 Getting and Setting Shared Cache

class var shared: URLCache
  • 싱글톤 인스턴스

🔗 Creating a New Cache Object

init(memoryCapacity: Int, diskCapacity: Int, directory: URL?)
  • 지정된 디렉토리에 지정된 메모리 및 디스크 용량으로 URL 캐시 개체를 만듭니다.

🔗 Getting and Storing Cached Objects

func cachedResponse(for: URLRequest) -> CachedURLResponse?
  • 지정된 URL 요청에 대한 캐시의 캐시된 URL 응답을 반환합니다.
func storeCachedResponse(CachedURLResponse, for: URLRequest)
  • 지정된 요청에 대해 캐시된 URL 응답을 저장합니다.
func getCachedResponse(for: URLSessionDataTask, completionHandler: (CachedURLResponse?) -> Void)
  • 데이터 작업에 대해 캐시된 URL 응답을 가져와 제공된 완료 처리기에 전달합니다.
func storeCachedResponse(CachedURLResponse, for: URLSessionDataTask)
  • 지정된 데이터 작업에 대해 캐시된 URL 응답을 저장합니다.

🔗 Removing Cached Objects

func removeCachedResponse(for: URLRequest)
  • 지정된 URL 요청에 대해 캐시된 URL 응답을 제거합니다.
func removeCachedResponse(for: URLSessionDataTask)
  • 지정된 데이터 작업에 대해 캐시된 URL 응답을 제거합니다.
func removeCachedResponses(since: Date)
  • 제공된 날짜 이후 캐시된 응답의 지정된 캐시를 지웁니다.
func removeAllCachedResponses()
  • 수신자의 캐시를 지우고 저장된 모든 캐시된 URL 응답을 제거합니다.

🔗 Getting and Setting On-disk Cache Properties

var currentDiskUsage: Int
  • 온디스크 캐시의 현재 크기(바이트)입니다.
var diskCapacity: Int
  • 디스크 상의 캐시 용량(바이트)입니다.

🧏‍♂️ Getting and Setting In-memory Cache Properties

var currentMemoryUsage: Int
  • 메모리 내 캐시의 현재 크기(바이트)입니다.
var memoryCapacity: Int
  • 메모리 내 캐시의 용량(바이트)입니다.

🔗 Cache Storage Policies

enum URLCache.StoragePolicy
  • CachedURLResponse 개체에서 사용하는 캐싱 전략을 지정합니다.
case allowed <- (default)
  • URLCache의 저장은 제한 없이 허용됩니다.
case allowedInMemoryOnly
  • URLCache의 저장이 허용됩니다. 그러나 스토리지는 메모리로만 제한되어야 합니다.
case notAllowed
  • URLCache의 저장은 메모리나 디스크에 어떤 방식으로든 허용되지 않습니다.

URLCache - 공식문서

핵심은 Request에 대한 URL 응답 자체를 캐싱하는 것.

profile
I Am Groot

0개의 댓글