-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
iOS 앱의 메모리 사용량 최적화를 위한 방안과 고려 사항에 대해 설명해주세요. #9
Comments
iOS 앱의 메모리 사용량 최적화를 위한 방안과 고려 사항에 대해 설명해주세요.메모리 관리 방법(ARC)
메모리 캐싱 기법(예: NSCache, 이미지 캐싱)의 개념과 iOS에서의 구현 방법을 설명해주세요.
메모리 캐시(memory cache)
디스크 캐시(disk cache)
NSCache
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, 썸네일 활용)에 대해 설명해주세요.
The text was updated successfully, but these errors were encountered: