July 19, 2021, TIL (Today I Learned) King fisher and more
1layout: post
title: "July 19, 2021, TIL (Today I Learned) King fisher and more"
summary: "analyzing Kingfisher"
author: inwoodev
date: '2021-07-19 22:35:23 +0530'
category: ['Swift_iOS', 'TIL']
thumbnail: /assets/img/posts/light-bulbs.jpg
keywords: ios, swift, kingfisher
permalink: /blog/TIL(Today I Learned)/70
usemathjax: true
학습내용
Kahoot
View LifeCycle
LLDB
NSCache
Local Caching
자주 열람하는 데이터를 빨리 쓸 수 있게 임시적으로 저장 해 놓는 공간
KingFisher
-
Kingfisher의 이미지 캐싱 방식의 종류는 무엇무엇이 있나요?
-
Kingfisher의 캐싱 기본동작은 어디어디에 캐싱하는 건가요?
- Memory
- Disk
public enum CacheType { /// The image is not cached yet when retrieving it. case none /// The image is cached in memory. case memory /// The image is cached in disk. case disk /// Whether the cache type represents the image is already cached or not. public var cached: Bool { switch self { case .memory, .disk: return true case .none: return false } } }
-
디스크 캐시의 기본 경로는?
~/Library/Caches
/// DiskStorage.swift /// 567 line extension DiskStorage { struct Creation { let directoryURL: URL let cacheName: String init(_ config: Config) { let url: URL if let directory = config.directory { url = directory } else { url = config.fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] } cacheName = "com.onevcat.Kingfisher.ImageCache.\\(config.name)" directoryURL = config.cachePathBlock(url, cacheName) } } }
-
디스크 캐시에 읽고 쓰는 기본 데이터 타입은?
- Data
public let diskStorage: DiskStorage.Backend<Data>
-
디스크 캐시 기능 수행을 위해 실질적으로 디스크에 쓰고 읽을 때 사용하는 Foundation 프레임워크 클래스는?
- FileManager
extension DiskStorage { struct Creation { let directoryURL: URL let cacheName: String init(_ config: Config) { let url: URL if let directory = config.directory { url = directory } else { url = config.fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] } cacheName = "com.onevcat.Kingfisher.ImageCache.\\(config.name)" directoryURL = config.cachePathBlock(url, cacheName) } } }
/// DiskStorage.swift /// 468 line extension DiskStorage { /// Represents the config used in a `DiskStorage`. public struct Config { /// Creates a config value based on given parameters. /// /// - Parameters: /// - name: The name of cache. It is used as a part of storage folder. It is used to identify the disk /// storage. Two storages with the same `name` would share the same folder in disk, and it should /// be prevented. /// - sizeLimit: The size limit in bytes for all existing files in the disk storage. /// - fileManager: The `FileManager` used to manipulate files on disk. Default is `FileManager.default`. /// - directory: The URL where the disk storage should live. The storage will use this as the root folder, /// and append a path which is constructed by input `name`. Default is `nil`, indicates that /// the cache directory under user domain mask will be used. public init( name: String, sizeLimit: UInt, fileManager: FileManager = .default, directory: URL? = nil) { self.name = name self.fileManager = fileManager self.directory = directory self.sizeLimit = sizeLimit } } }
-
Kingfisher에서는 기본적으로 이 값을 파일이름으로 사용하기도 합니다.
→ HashKey
// DiskStorage.swift // 314 line func cacheFileName(forKey key: String) -> String { if config.usesHashedFileName { let hashedKey = key.kf.md5 if let ext = config.pathExtension { return "\\(hashedKey).\\(ext)" } else if config.autoExtAfterHashedFileName, let ext = key.kf.ext { return "\\(hashedKey).\\(ext)" } return hashedKey } else { if let ext = config.pathExtension { return "\\(key).\\(ext)" } return key } }
-
Hash는 어떤 개념인가요?
- hash function을 사용하여 hash value를 생성하고 이를 key로 사용해 key-value 형태로 저장
- 기록한 아이템을 찾을 때도 hash function을 사용해 hash value값을 key로 통해 찾음
-
여기에 왜 Hash 처리한 값을 사용하는 걸까요?
- HashKey는 고유값, 중복이 되지 않기 때문에 딕셔너리의 Key로 사용 가능
- caching한 파일이 많아져도 O(1) 시간복잡도로 파일 탐색이 가능함
어떤 이미지인지 분간이 가능해야 하는데 이를 위해서는 해당 이미지가 어디에 있던 이미지인지 알아야 됨. URL → hash함수 → key 값
딕셔너리에 URL에 해당되는 이미지를 value로 넣어준다는 개념. 이 url이 hashfunction을 거치면 local에서 쓸 수 있는 key 값으로 갖게될 수 있음
-
Author And Source
이 문제에 관하여(July 19, 2021, TIL (Today I Learned) King fisher and more), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@inwoodev/July-19-2021-TIL-Today-I-Learned-King-fisher-and-more저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)