Disk Cache: τι είναι, προσωρινή μνήμη δίσκου iOS και αρχές λειτουργίας

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-07-11 Χρόνος ανάγνωσης: 7 λεπ

Disk Cache — είναι ένας μηχανισμός προσωρινής αποθήκευσης δεδομένων στο δίσκο της συσκευής, που επιτρέπει στις εφαρμογές iOS να επιταχύνουν την επαναλαμβανόμενη πρόσβαση σε προηγουμένως φορτωμένους πόρους. Σύμφωνα με το Apple Developer Documentation, 2024, το Disk Cache μειώνει τη χρήση δικτύου, μειώνει την επιβάρυνση της μπαταρίας και εξασφαλίζει τη λειτουργία της εφαρμογής σε λειτουργία εκτός σύνδεσης. Το iOS παρέχει διάφορους ενσωματωμένους μηχανισμούς προσωρινής αποθήκευσης: URLCache για αιτήματα δικτύου, NSCache για μνήμη RAM και προσαρμοσμένες υλοποιήσεις μέσω του καταλόγου Caches.

Κύρια σημεία

  • Disk Cache — αποθήκευση δεδομένων στο δίσκο για επιτάχυνση της επαναλαμβανόμενης πρόσβασης και μείωση της κίνησης
  • URLCache — ενσωματωμένος μηχανισμός προσωρινής αποθήκευσης αιτημάτων HTTP στο iOS
  • Caches directory — ειδικός κατάλογος Sandbox για προσωρινά δεδομένα εφαρμογής
  • Ακύρωση προσωρινής μνήμης είναι κρίσιμη για την επικαιρότητα των δεδομένων — στρατηγικές βάσει χρόνου, συμβάντος και έκδοσης
  • Το σύστημα μπορεί να καθαρίσει την προσωρινή μνήμη όταν υπάρχει έλλειψη χώρου — η προσωρινή μνήμη δεν πρέπει να περιέχει αναντικατάστατα δεδομένα

Τι είναι το Disk Cache στο iOS;

Disk Cache — είναι μια τεχνολογία προσωρινής αποθήκευσης δεδομένων στη μόνιμη μνήμη της συσκευής (flash memory) για την επιτάχυνση μεταγενέστερων αιτημάτων προς τα ίδια δεδομένα. Σε αντίθεση με την προσωρινή μνήμη RAM, το Disk Cache διατηρεί τα δεδομένα μετά από επανεκκίνηση της εφαρμογής και ακόμη και της συσκευής.

Το iOS παρέχει δύο κύρια επίπεδα προσωρινής αποθήκευσης: λειτουργικό (NSCache, μνήμη) και δίσκου (URLCache, σύστημα αρχείων). Η προσωρινή μνήμη δίσκου είναι 10–100 φορές πιο αργή από τη λειτουργική, αλλά σημαντικά ταχύτερη από ένα αίτημα δικτύου — η διαφορά μπορεί να είναι 2 έως 3 τάξεις μεγέθους. Η βέλτιστη στρατηγική χρησιμοποιεί προσωρινή μνήμη δύο επιπέδων: μνήμη για θερμά δεδομένα και δίσκο για ψυχρά δεδομένα.

Σύμφωνα με το Apple Performance Optimization Guide, 2023, ένα σωστά διαμορφωμένο Disk Cache μειώνει το χρόνο φόρτωσης περιεχομένου κατά 60–80% για επαναλαμβανόμενες προβολές και μειώνει την κατανάλωση κίνησης κατά 40–70%. Για εφαρμογές με περιεχόμενο πολυμέσων (εικόνες, βίντεο, ήχος), η προσωρινή αποθήκευση είναι κρίσιμος παράγοντας UX.

URLCache: ενσωματωμένος μηχανισμός προσωρινής αποθήκευσης

URLCache — είναι μια ενσωματωμένη κλάση Foundation που υλοποιεί συνδυασμένη προσωρινή μνήμη για αιτήματα URLSession. Αποθηκεύει αυτόματα τις απαντήσεις διακομιστή στο δίσκο και στη μνήμη, διαχειριζόμενη το μέγεθος της προσωρινής μνήμης και τις πολιτικές ακύρωσης βάσει των κεφαλίδων HTTP Cache-Control, Expires και ETag.

swift
import Foundation

let cache = URLCache(
    memoryCapacity: 50 * 1024 * 1024,
    diskCapacity: 200 * 1024 * 1024,
    diskPath: "network-cache"
)

URLCache.shared = cache

let config = URLSessionConfiguration.default
config.urlCache = cache
config.requestCachePolicy = .returnCacheDataElseLoad

let session = URLSession(configuration: config)

Πολιτικές προσωρινής αποθήκευσης Το URLCache καθορίζει πότε να χρησιμοποιεί δεδομένα από την προσωρινή μνήμη και πότε να εκτελεί νέο αίτημα. Κύριες πολιτικές: useProtocolCachePolicy (βάσει κεφαλίδων διακομιστή), reloadIgnoringLocalCacheData (πάντα από τον διακομιστή), returnCacheDataElseLoad (πρώτα η προσωρινή μνήμη), returnCacheDataDontLoad (μόνο προσωρινή μνήμη — λειτουργία εκτός σύνδεσης).

Cache-Control — κεφαλίδα HTTP που στέλνει ο διακομιστής μαζί με την απάντηση, υποδεικνύοντας max-age (διάρκεια ζωής σε δευτερόλεπτα), must-revalidate (έλεγχος επικαιρότητας), no-cache (μην χρησιμοποιείς χωρίς επαλήθευση) και no-store (μην αποθηκεύεις στην προσωρινή μνήμη). Το iOS τηρεί αυστηρά αυτές τις κεφαλίδες αυτόματα όταν χρησιμοποιεί URLCache με πολιτική useProtocolCachePolicy.

Προσαρμοσμένες στρατηγικές προσωρινής αποθήκευσης και ακύρωση

Προσαρμοσμένη προσωρινή μνήμη είναι απαραίτητη όταν το ενσωματωμένο URLCache δεν επαρκεί: για αποθήκευση επεξεργασμένων εικόνων, σειριοποιημένων μοντέλων δεδομένων ή αποτελεσμάτων υπολογισμών. Σε τέτοιες περιπτώσεις, ο προγραμματιστής δημιουργεί το δικό του σύστημα προσωρινής αποθήκευσης βασισμένο στον κατάλογο Caches στο Sandbox της εφαρμογής.

swift
class DiskCache<T: Codable> {
    private let cacheDir: URL
    private let encoder = JSONEncoder()
    private let decoder = JSONDecoder()

    init() {
        let paths = FileManager.default
            .urls(for: .cachesDirectory,
                     in: .userDomainMask)
        cacheDir = paths[0].appendingPathComponent(
            "data-cache", isDirectory: true
        )
        try? FileManager.default
            .createDirectory(at: cacheDir,
                             withIntermediateDirectories: true)
    }

    func set(value: T, for key: String) {
        let url = cacheDir.appendingPathComponent(
            SHA256.hash(key)
        )
        if let data = try? encoder.encode(value) {
            try? data.write(to: url)
        }
    }

    func get(for key: String) -> T? {
        let url = cacheDir.appendingPathComponent(
            SHA256.hash(key)
        )
        guard let data = try? Data(contentsOf: url) else { return nil }
        return try? decoder.decode(T.self, from: data)
    }

    func clearAll() {
        try? FileManager.default
            .removeItem(at: cacheDir)
    }
}

Στρατηγικές ακύρωσης της προσωρινής μνήμης καθορίζουν πότε τα αποθηκευμένα δεδομένα θεωρούνται παρωχημένα: TTL (Time-To-Live) — τα δεδομένα ζουν για σταθερό χρόνο μετά την εγγραφή; event-driven — ακύρωση με την εμφάνιση ενός συμβάντος (π.χ. ενημέρωση δεδομένων στον διακομιστή); version-based — ακύρωση όταν αλλάζει η έκδοση API ή η μορφή δεδομένων; LRU (Least Recently Used) — αυτόματη διαγραφή των λιγότερο χρησιμοποιούμενων εγγραφών όταν ξεπερνιέται το όριο μεγέθους.

Πρακτικός κανόνας: Το TTL είναι κατάλληλο για ειδήσεις και περιεχόμενο που παλιώνει προβλέψιμα. Event-driven — για δεδομένα που διαχειρίζεται ο διακομιστής μέσω ειδοποιήσεων push. Version-based — για διαμορφώσεις και προσωρινή μνήμη μοντέλων δεδομένων. LRU — καθολική επιλογή για αρχεία πολυμέσων με περιορισμένο χώρο δίσκου.

Απόδοση και περιορισμοί της προσωρινής μνήμης

Η απόδοση του Disk Cache μετριέται με hit ratio — το ποσοστό αιτημάτων που εξυπηρετούνται από την προσωρινή μνήμη χωρίς πρόσβαση στο δίκτυο. Το τυπικό hit ratio για μια καλά διαμορφωμένη προσωρινή μνήμη εικόνων είναι 70–90%, για απαντήσεις API — 40–60%, για ροή βίντεο — 30–50%.

Τύπος δεδομένωνΤυπικό hit ratioΣυνιστώμενο μέγεθος προσωρινής μνήμης
Εικόνες70–90%100–500 MB
Απαντήσεις API JSON40–60%10–50 MB
Βίντεο/ήχος30–50%500 MB — 1 GB
Γραμματοσειρές και πόροι90–99%5–20 MB
Περιεχόμενο ιστού50–70%50–200 MB

Περιορισμοί του Disk Cache στο iOS: το σύστημα μπορεί να διαγράψει το περιεχόμενο του καταλόγου Caches ανά πάσα στιγμή όταν υπάρχει έλλειψη χώρου στο δίσκο. Αυτή η συμπεριφορά δεν μπορεί να ρυθμιστεί — το iOS αποφασίζει μόνο του πότε και ποια αρχεία προσωρινής μνήμης θα διαγράψει. Επομένως, η προσωρινή μνήμη δεν πρέπει να περιέχει δεδομένα που δεν μπορούν να ανακτηθούν από το δίκτυο ή άλλες πηγές.

Επίπτωση στη μνήμη flash: η συχνή εγγραφή στο Disk Cache επιταχύνει τη φθορά της μνήμης flash. Το iOS χρησιμοποιεί TRIM και wear leveling για να ελαχιστοποιήσει τη φθορά, αλλά συνιστάται στους προγραμματιστές να αποφεύγουν την υπερβολική εγγραφή: να μην ενημερώνουν την προσωρινή μνήμη περισσότερο από μία φορά κάθε 5 λεπτά για το ίδιο αρχείο; να ομαδοποιούν μικρές εγγραφές σε μία; να χρησιμοποιούν NSCache για προσωρινά δεδομένα που δεν χρειάζεται να αποθηκευτούν στο δίσκο.

Βέλτιστες πρακτικές προσωρινής αποθήκευσης στο iOS

Προσωρινή μνήμη δύο επιπέδων — τυπική αρχιτεκτονική για εφαρμογές iOS: μνήμη (NSCache) για δεδομένα που προσπελάζονται συχνά και δίσκος (URLCache ή προσαρμοσμένος) για δεδομένα που πρέπει να διατηρούνται μεταξύ συνεδριών. Διάρκεια ζωής στη μνήμη — λεπτά, στο δίσκο — ώρες ή ημέρες.

Προσωρινή αποθήκευση εικόνων: χρησιμοποιήστε εξειδικευμένες βιβλιοθήκες (Kingfisher, SDWebImage, Nuke) που υλοποιούν προσωρινή μνήμη δύο επιπέδων με αυτόματη ακύρωση, διαχείριση μνήμης και ασύγχρονη εγγραφή στο δίσκο. Η αυτόνομη υλοποίηση προσωρινής μνήμης εικόνων απαιτεί την εξέταση της αποκωδικοποίησης, του χρωματικού χώρου και της κλιμάκωσης.

Προσωρινή μνήμη και ασφάλεια: μην αποθηκεύετε εμπιστευτικά δεδομένα (κωδικούς πρόσβασης, διακριτικά, προσωπικά δεδομένα) στο δίσκο χωρίς κρυπτογράφηση. Το URLCache από προεπιλογή δεν κρυπτογραφεί δεδομένα — χρησιμοποιήστε NSFileProtection ή κρυπτογράφηση σε επίπεδο εφαρμογής για ευαίσθητο περιεχόμενο. Για αιτήματα δικτύου με εξουσιοδότηση, χρησιμοποιήστε την πολιτική .reloadIgnoringLocalCacheData.

Παρακολούθηση προσωρινής μνήμης: παρακολουθείτε το hit ratio, το τρέχον μέγεθος προσωρινής μνήμης και τον αριθμό εγγραφών ανά λεπτό. Εάν το hit ratio πέσει κάτω από 30% — η προσωρινή μνήμη είναι αναποτελεσματική και απαιτεί αναθεώρηση της στρατηγικής ή αύξηση του μεγέθους. Σύμφωνα με το Point-Free (2024), η παρακολούθηση της προσωρινής μνήμης είναι μία από τις πιο υποτιμημένες πρακτικές βελτιστοποίησης απόδοσης εφαρμογών iOS.

Συχνές ερωτήσεις

Τι είναι το Disk Cache στο iOS;

Disk Cache — τεχνολογία αποθήκευσης δεδομένων στο δίσκο της συσκευής για επιτάχυνση της επαναλαμβανόμενης πρόσβασης. Στο iOS, το ενσωματωμένο URLCache αποθηκεύει προσωρινά τις απαντήσεις HTTP και οι προγραμματιστές μπορούν να δημιουργήσουν προσαρμοσμένες προσωρινές μνήμες μέσω του καταλόγου Caches.

Ποια είναι η διαφορά μεταξύ Disk Cache και RAM Cache;

RAM Cache (NSCache) αποθηκεύει δεδομένα στη μνήμη RAM — είναι ταχύτερο, αλλά χάνεται κατά την επανεκκίνηση της εφαρμογής. Το Disk Cache είναι πιο αργό, αλλά διατηρείται μεταξύ συνεδριών. Η βέλτιστη στρατηγική χρησιμοποιεί και τα δύο επίπεδα: μνήμη για θερμά δεδομένα, δίσκο για ψυχρά.

Μπορεί το iOS να διαγράψει την προσωρινή μου μνήμη;

Ναι, το σύστημα μπορεί να διαγράψει το περιεχόμενο του καταλόγου Caches ανά πάσα στιγμή όταν υπάρχει έλλειψη χώρου. Επομένως, μην αποθηκεύετε ποτέ στην προσωρινή μνήμη δεδομένα που δεν μπορούν να ανακτηθούν. Για έγγραφα χρήστη, χρησιμοποιήστε τον κατάλογο Documents.

Πώς να επιλέξω το σωστό μέγεθος προσωρινής μνήμης;

Το μέγεθος προσωρινής μνήμης εξαρτάται από τον τύπο δεδομένων: για εικόνες 100–500 MB, για απαντήσεις API 10–50 MB, για βίντεο έως 1 GB. Παρακολουθείτε το hit ratio — αν πέσει κάτω από 50%, αυξήστε το μέγεθος προσωρινής μνήμης ή αλλάξτε τη στρατηγική ακύρωσης.

Πώς να καθαρίσω την προσωρινή μνήμη σε μια εφαρμογή iOS;

Το URLCache.removeAllCachedResponses() καθαρίζει την ενσωματωμένη προσωρινή μνήμη. Για προσαρμοσμένη προσωρινή μνήμη, διαγράψτε αρχεία από τον κατάλογο Caches μέσω FileManager. Πάντα να παρέχετε στο χρήστη τη δυνατότητα να καθαρίσει την προσωρινή μνήμη στις ρυθμίσεις της εφαρμογής.

Σύνοψη

  • Disk Cache — προσωρινή αποθήκευση δεδομένων στο δίσκο για επιτάχυνση της επαναλαμβανόμενης πρόσβασης και μείωση της κίνησης
  • URLCache — ενσωματωμένος μηχανισμός Foundation για προσωρινή αποθήκευση αιτημάτων HTTP με υποστήριξη Cache-Control
  • Caches directory — κατάλογος Sandbox για προσωρινά δεδομένα, που καθαρίζεται από το σύστημα όταν υπάρχει έλλειψη χώρου
  • Ακύρωση της προσωρινής μνήμης γίνεται μέσω TTL, συμβάντος, έκδοσης ή LRU — η επιλογή εξαρτάται από τον τύπο δεδομένων
  • Hit ratio — βασική μετρική αποδοτικότητας προσωρινής μνήμης: 70%+ για εικόνες, 40–60% για API
  • Προσωρινή μνήμη δύο επιπέδων (RAM + Δίσκος) — τυπική αρχιτεκτονική για εφαρμογές iOS
  • Ασφάλεια — τα εμπιστευτικά δεδομένα δεν πρέπει να αποθηκεύονται προσωρινά στο δίσκο χωρίς κρυπτογράφηση

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης