[iOS/SWIFT]キャッシュを充電しよう

8233 ワード

今まで知り合ったケイシー。



この方法で充電して、ハイネシスで金持ちの生活を送っています.
(中学3年生の時に携帯電話で40万元チャージして追い出されたことがあります)

とにかく、今日はケイシーとケイシーについて知りましょう。


またお聞きしましょう.

次回はもう一度知ろうと思っていたのですが、炎上するような声援で使い続けました.かっこいい...

列を数える


コンピュータのパフォーマンスを向上させるメモリ。メインメモリとCPUの間にあり、繰り返し使用するデータを格納し、高速ロードします。


ネイサンで、繰り返し叫んだのはケイシー...充電できません.

放送局


キャッシュ領域にデータをインポートしてデータにアクセスすることにより、メモリ内のデータを計算し、より高速なCPUメモリ領域にインポートして処理を実行することをキャッシュと呼ぶ。事前にコピーされたデータにアクセスし、アプリケーションの処理速度を速めることができます。


💵 キャッシュを区別する条件

- 캐시는 클라이언트 서버 구분이 있나? 
	- Client-side caching
    - Server-side caching
- 캐시는 어디에 저장할까?
	- Disk Cache (하드 디스크에 저장)
    - Memory Cache (메인 메모리에 저장)
- 또 다른 기준이 있나?

Memory Cache


メモリキャッシュは、アプリケーションのメモリ領域の一部をキャッシュに使用します.
アプリケーションを閉じてメモリから解放すると、保存されている内容が空になります.(入って、ゴミ箱🗑🗑)
SWIFTはキャッシュ機能をサポートし、NSCacheを使用して実現できる.

Disk Cache


ディスクキャッシュは、FileManagerがデータを使用してディスクにファイル形式で格納します.
デバイスに格納され、閉じてからアプリケーションを開いても、格納されたコンテンツは保持されます.
ex)ディスクキャッシュの例を参照すると、最も多くのKakaoTalkが表示され、友人たちが送った写真やビデオを見たい場合は、保存しなくてもダウンロードして見ることができます.これらのダウンロードされた写真およびビデオファイルがキャッシュに含まれており、容量が大きくなるにつれて、記憶領域を管理することで、記憶されたキャッシュデータを削除して空間を解放することができる.一度に完全にクリアしよう...👌🏻👌🏻

NSCache❓

NSCacheは、前述したように、主にiOSのメモリキャッシュに使用されます.
正式な書類の定義から見ると、
一時的なストレージリソースが不足している場合に削除するkey-valueペアの可変セットです.そうなるとこれは何の话なのか、一、二、システムメモリが多すぎると処刑対象なのか、薄っぺらな世界なのか.

また,Cacheオブジェクトが他の可変集合と異なる点も指摘した.
  • NSCacheクラスには、キャッシュがシステムメモリを過度に使用することを防止する自動パージポリシーがあります.他のアプリケーションでメモリが必要な場合、これらのポリシーはキャッシュからエントリを削除し、メモリの消費量を削減します.
  • キャッシュを直接ロックする必要がなく、他のスレッドからキャッシュ内のエントリを追加、削除、クエリーできます.(thread-safeと呼ぶ)
  • NSMutableDictionaryオブジェクトとは異なり、キャッシュに格納されている鍵オブジェクトはキャッシュにコピーされません.
  • ✔¥結論:高価な一時データを格納する際にNSCacheを使用する.これらのオブジェクトを再使用すると、これらの値を再計算する必要がないため、パフォーマンスのメリットが得られます.
    (上記のようにメモリ不足の場合は削除できますが、削除後は再計算が必要です.)

    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()
        }
    }
    

    ㄴrの呵h sing政策?で...


    最初はメモリで確認して、あれば出して、なければディスクから探します.でも保存されているものはありますか?その後、メモリにNSCacheとして登録し、ない場合はダウンロードします.ダウンロードが終わったら、両方をメモリとディスクに保存します!
    これは、後でメモリから削除すると、ディスクに表示されるためです.