요런 방법으로다가 충전해서 헤네시스에서 갑부의 삶을 살았었다ㅋ
(초3때 핸드폰으로 40만원 충전하다가 쫒겨난 적 있음)
다음에 알아보자..
다음에 알아보려고 했는데 열화와 같은 성원에 힘입어 이어 씁니다.. 멋쓱..
넥슨에선 반복적으로 지르는게 캐시였는데.. 충전 못하겠네 이거..
- 캐시는 클라이언트 서버 구분이 있나?
- Client-side caching
- Server-side caching
- 캐시는 어디에 저장할까?
- Disk Cache (하드 디스크에 저장)
- Memory Cache (메인 메모리에 저장)
- 또 다른 기준이 있나?
메모리 캐시는 어플리케이션 메모리 영역의 일정 부분을 캐싱에 사용한다.
어플리케이션을 종료해 메모리에서 해제되면 저장된 내용이 비워진다. (들어가. 쓰레기통 🗑🗑)
Swift에서는 캐시기능을 지원하는데, NSCache
라는 것을 사용해서 구현할 수 있다.
디스크 캐시는 FileManager
이용 데이터를 파일형태로 디스크에 저장한다.
기기안에 저장되어있어 어플리케이션을 껐다가 켜도 저장된 내용이 남아있다.
ex) 디스크 캐시의 예시를 찾아보면 카카오톡이 가장 많이 나오는데, 친구들이 보내는 사진, 동영상들을 보려면 저장은 안해도 다운로드를 받아야 볼 수 있다. 이렇게 다운로드를 받은 사진과 동영상 파일들이 캐시에 포함되고 용량이 커지면 저장공간 관리를 보면 저장된 캐시 데이터를 삭제해서 공간을 확보할 수 있다. 한번씩 야무지게 비워주자.. 👌🏻👌🏻
NSCache
는 위에서 말했듯이 iOS에서 메모리 캐싱에 주로 사용된다.
공식문서의 정의를 보면,
리소스가 부족할 때 제거될 key-value 쌍을 임시로 저장하는데 사용하는 가변 컬렉션입니다. 라는데 이게 몬말이냐❓ㅎ 시스템 메모리 많이 차지하면 처형대상이라는 말인듯,, 각박한 세상ㅠ
추가적으로 Cache 객체와 다른 가변 컬렉션과 다른점에 대해서도 나와있다.
✔️ 결론적으로 생성하는데 비용이 많이드는 임시 데이터를 저장할 때 NSCache를 사용한다고 한다. 이러한 객체를 재사용함으로써 해당 값을 다시 계산할 필요가 없기 때문에 성능상의 이점을 얻을 수 있다.
(근데 위에 나와있듯이 메모리가 부족할 때는 삭제될 수 있고, 삭제된 후에는 필요할 때 다시 계산되어야한다.)
곧 추가할게욘,, 넘 졸려,,
class ImageCacheManager {
static let shared = NSCache<NSString, UIImage>()
init() { }
}
extension UIImageView {
func loadImage(from imageUrl: String) {
let cacheKey = NSString(string: imageUrl)
if let cachedImage = ImageCacheManager.shared.object(forKey: cacheKey) {
self.image = cachedImage
return
}
guard let url = URL(string: url) else { return }
URLSession.shared.dataTask(with: url) { data, response, error in
guard error == nil else {
return
}
guard let data = data else {
return
}
DispatchQueue.main.async {
guard let image = UIImage(data: data) else {
return
}
imageCache.setObject(image, forKey: cacheKey)
completion(image)
}
}.resume()
}
}
처음에 메모리에서 확인하고, 있으면 꺼내오고 없으면 디스크에서 찾아유. 근데 저장된게 있다? 그럼 메모리에 NSCache로 등록하고 없으면 다운로드 해버림니다. 다운받고 나서 메모리랑 디스크에 둘다 저장 ㄱㄱ!
그래야 나중에 메모리에서 삭제되면 디스크에서 찾을 수 있기때문 임니다.
????