Open hamfan524 opened 8 months ago
메모리 관리:
리소스 관리:
메모리 캐싱 기법:
대용량 데이터 처리:
캐시(cache, 문화어: 캐쉬, 고속완충기, 고속완충기억기)는 컴퓨터 과학에서 데이터나 값을 미리 복사해 놓는 임시 장소를 가리킵니다.
import UIKit
class ImageCache {
static let shared = ImageCache()
// NSCache 인스턴스 생성
private let cache = NSCache<NSString, UIImage>()
private init() {}
// 이미지 캐싱
func cacheImage(_ image: UIImage, forKey key: String) {
cache.setObject(image, forKey: key as NSString)
}
// 이미지 가져오기
func getImage(forKey key: String) -> UIImage? {
return cache.object(forKey: key as NSString)
}
}
위의 예제에서는 UIImage를 NSCache에 저장하고 관리하는 싱글톤 클래스입니다.
이미지를 캐싱하면 동일한 이미지를 다시 로드할 때 파일 시스템이나 네트워크에서 로드하는 비용을 줄일 수 있습니다.
이제 위 코드를 이용해서 이미지를 캐시하고, 캐시된 이미지가 존재하면 해당 이미지를 사용하는 코드를 보겠습니다.
import UIKit
class ImageViewController: UIViewController {
@IBOutlet weak var imageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
// 이미지 캐시에 이미지가 있는지 확인
Task {
if let cachedImage = await ImageCache.shared.getImage(forKey: "exampleKey") {
// 캐시된 이미지가 있을 경우 이미지뷰에 표시
imageView.image = cachedImage
} else {
// 캐시된 이미지가 없을 경우 네트워크나 로컬에서 이미지를 로드하여 캐시에 저장
await loadImageFromNetwork()
}
}
}
func loadImageFromNetwork() async {
// 네트워크나 로컬에서 이미지를 로드하여 캐시에 저장하는 예시 함수
// 예시를 위해 임의의 이미지 URL을 사용하였습니다.
let imageUrlString = "https://example.com/image.jpg"
if let imageUrl = URL(string: imageUrlString) {
do {
let imageData = try await Data(contentsOf: imageUrl)
if let image = UIImage(data: imageData) {
// 이미지 캐시에 이미지 저장
await ImageCache.shared.cacheImage(image, forKey: "exampleKey")
// 이미지뷰에 이미지 설정
imageView.image = image
}
} catch {
print("Error loading image:", error)
}
}
}
}
viewDidLoad()에서 이미지 캐시에 저장된 이미지를 가져와서 있으면 이미지뷰에 표시하고, 없으면 loadImageFromNetwork() 함수를 호출하여 네트워크나 로컬에서 이미지를 로드하여 캐시에 저장한 후 이미지뷰에 표시합니다.
Lazy Loading (지연 로딩):
썸네일 활용:
메모리 해제:
압축 및 최적화:
페이징:
캐싱:
썸네일 활용: 대용량 이미지나 비디오를 처리할 때는 썸네일을 사용하여 초기 로딩 시간을 단축하고 메모리 사용량을 줄일 수 있습니다.
썸네일을 사용하면 어떤 이유로 초기 로딩 시간이 단축되나요?
Autorelease Pool 은 몰랐던 부분인데 알아가네요..! 👍
메모리 캐싱 기법(예: NSCache, 이미지 캐싱)의 개념과 iOS에서의 구현 방법을 설명해주세요. 대용량 데이터(예: 이미지, 비디오) 처리 시 메모리 최적화 방안(예: lazy loading, 썸네일 활용)에 대해 설명해주세요.