---
# System prepended metadata

title: 20220217 IOS 일일 개발 일지

---

20220217 IOS 일일 개발 일지
===

```swift=
if let image = imageCache.image(forKey: urlString) {
    DispatchQueue.main.async { [weak self] in
        self?.itemView.productImageView.image = image
    }
} else {
    sessionTask = loadImage(url: url) { (image) in
        image.flatMap { imageCache.add($0, forKey: urlString) }
        DispatchQueue.main.async { [weak self] in
            self?.itemView.productImageView.image = image
        }
    }
}
```

이미지에 대해서 NSCache를 활용해서 같은 방식의 캐싱을 적용하고자 함.

메모리 캐시가 아닌 디스크 캐시의 방식이 있지만,
쇼핑몰이라는 플랫폼을 생각했을 때, 이미지는 자연스레 계속 검색에 따라 다양하게 나올 것이고, 같은 상품에 대해서도 이미지가 자연스레 바뀌는 일도 있을 거라고 고려했다. 따라서 디스크에 저장할 경우, 데이터 저장할 수 있는 양은 많겠지만, 상품은 계속 업데이트가 될 부분이고, 휘발성 메모리에 저장하는 것이 오히려 캐싱의 측면에서 적절하다고 생각했다.

urlsession 내부에서 네트워크 캐시를 이용할 수 있는 방법도 있는 것 같지만, 이번엔 nscache의 구현을 진행해보기

wishList에 카운팅을 올리고 나서 viewDidLoad를 재호출하게 될 경우, 너무 많은 리소스가 소모된다.
찜 목록에 대한 api의 응답에 대해서 뷰에 반영해 줄 수 있도록 하는 방법을 써야할 듯?


### 리팩토링

리팩토링을 시도하고 드디어 지울 수 있게 됐다!

![](https://i.imgur.com/AyoRRfL.png)

