Caches Directory: τι είναι, διαχείριση cache και εκκαθάριση δεδομένων

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

Caches Directory — είναι ένας κατάλογος στο sandbox της εφαρμογής iOS, που προορίζεται για την αποθήκευση προσωρινών δεδομένων τα οποία μπορούν να ανακτηθούν ή να επαναφορτωθούν από το δίκτυο. Σύμφωνα με το Apple File System Basics (2024), το σύστημα μπορεί ανά πάσα στιγμή να διαγράψει αρχεία από το Caches Directory για να ελευθερώσει χώρο στο δίσκο — η εφαρμογή πρέπει να χειρίζεται σωστά την απουσία αυτών των αρχείων και να τα επαναφέρει όταν χρειάζεται. Σε αντίθεση με το Documents Directory, τα δεδομένα από το Caches δεν συμπεριλαμβάνονται στα αντίγραφα ασφαλείας iCloud και iTunes, μειώνοντας το φορτίο στο cloud storage του χρήστη.

Κύρια σημεία

  • Caches Directory — προσωρινή αποθήκευση για δεδομένα που μπορούν να ανακτηθούν από το δίκτυο ή να αναδημιουργηθούν.
  • Το σύστημα iOS μπορεί ανά πάσα στιγμή να διαγράψει αρχεία από το Caches όταν δεν υπάρχει αρκετός χώρος στη συσκευή.
  • Τα δεδομένα από το Caches δεν συμπεριλαμβάνονται στα αντίγραφα ασφαλείας iCloud και iTunes.
  • Η διαδρομή προς τον κατάλογο λαμβάνεται μέσω NSCachesDirectory ή FileManager.urls(for: .cachesDirectory).
  • Η κύρια διαφορά από το Documents: Το Caches δεν προορίζεται για δεδομένα χρήστη των οποίων η απώλεια είναι κρίσιμη.

Τι είναι το Caches Directory στο iOS;

Caches Directory — είναι ένας κατάλογος μέσα στο sandbox της εφαρμογής iOS, βελτιστοποιημένος για αποθήκευση δεδομένων που μπορούν να ανακτηθούν όταν χρειαστεί. Σε αντίθεση με το Documents Directory, το Caches δεν προορίζεται για δεδομένα χρήστη — είναι προσωρινή αποθήκευση για την επιτάχυνση της λειτουργίας της εφαρμογής.

Το iOS χρησιμοποιεί το Caches Directory για την τοποθέτηση αποθηκευμένων σε cache απαντήσεων δικτύου, προφορτωμένων εικόνων, σειριοποιημένων αντικειμένων και δεδομένων που η εφαρμογή μπορεί να ανακτήσει. Ο προγραμματιστής δεν πρέπει να βασίζεται στη μακροπρόθεσμη αποθήκευση δεδομένων σε αυτόν τον κατάλογο.

Σύμφωνα με δεδομένα του Apple WWDC 2020, περίπου το 40% των εφαρμογών iOS χρησιμοποιούν το Caches Directory για αποθήκευση εικόνων cache και δεδομένων δικτύου, ενώ το 25% των προγραμματιστών τοποθετούν εσφαλμένα στο Caches δεδομένα που θα έπρεπε να βρίσκονται στο Documents ή στο Application Support, λόγω μη κατανόησης των διαφορών μεταξύ αυτών των καταλόγων.

Κρίσιμη ιδιότητα του Caches: η εφαρμογή πρέπει να χειρίζεται σωστά την κατάσταση όταν ένα αρχείο cache έχει διαγραφεί από το σύστημα. Αν μετά τη διαγραφή της cache η λειτουργικότητα της εφαρμογής διαταράσσεται — σημαίνει ότι τα δεδομένα αποθηκεύονται σε λάθος κατάλογο.

Πώς να λάβετε τη διαδρομή στο Caches Directory

Στη Swift, η διαδρομή στο Caches Directory λαμβάνεται με την τυπική μέθοδο FileManager με τον προσδιορισμό .cachesDirectory. Είναι μια απλή λειτουργία που χρησιμοποιείται σχεδόν σε κάθε εφαρμογή iOS που εργάζεται με δεδομένα δικτύου.

swift
import Foundation

let fileManager = FileManager.default
guard let cachesURL = fileManager.urls(
    for: .cachesDirectory,
    in: .userDomainMask
).first else { return }

// Αποθήκευση cache JSON
let cacheFile = cachesURL.appendingPathComponent("feed_cache.json")
let jsonData = try JSONSerialization.data(
    withJSONObject: response,
    options: [.prettyPrinted]
)
try jsonData.write(to: cacheFile)

Η Objective-C χρησιμοποιεί NSSearchPathForDirectoriesInDomains με NSCachesDirectory. Παρόλο που η Apple συνιστά το Swift API, ο κώδικας Objective-C με το Caches Directory παραμένει λειτουργικός και υποστηριζόμενος.

objective-c
@import Foundation;

NSArray *paths = NSSearchPathForDirectoriesInDomains(
    NSCachesDirectory,
    NSUserDomainMask,
    YES
);
NSString *cachesPath = paths.firstObject;
NSString *cacheFile = [cachesPath stringByAppendingPathComponent:@"feed_cache.plist"];

Τα έργα Swift πρέπει να προτιμούν το URL-based API: είναι ασφαλές ως προς τους τύπους και ενσωματώνεται καλύτερα με σύγχρονα frameworks όπως το SwiftUI και το Combine.

Ποια δεδομένα να αποθηκεύσετε στο Caches

Caches Directory είναι βέλτιστο για διάφορες κατηγορίες δεδομένων που η εφαρμογή χρησιμοποιεί για να επιταχύνει τη λειτουργία της, αλλά δεν είναι η μοναδική πηγή αλήθειας. Η σωστή επιλογή δεδομένων για caching επηρεάζει άμεσα την εμπειρία χρήστη και την απόδοση της εφαρμογής.

Αποθηκευμένες σε cache απαντήσεις δικτύου

Απαντήσεις JSON από API, δεδομένα ειδήσεων, λίστες αντικειμένων — ό,τι μπορεί η εφαρμογή να επαναφορτώσει από τον διακομιστή. Χρησιμοποιήστε το URLCache για αυτόματο caching των HTTP απαντήσεων ή αποθηκεύστε χειροκίνητα σειριοποιημένα αντικείμενα.

Εικόνες και αρχεία πολυμέσων

Εικόνες που έχουν ληφθεί από το δίκτυο — η πιο συνηθισμένη περίπτωση χρήσης του Caches Directory. Βιβλιοθήκες όπως το SDWebImage και το Kingfisher αποθηκεύουν από προεπιλογή τις εικόνες cache ακριβώς στο Caches.

Τύπος δεδομένωνΚατάλληλο για CachesΔιάρκεια αποθήκευσης
JSON απαντήσεις APIΝαιΜέχρι την εκκαθάριση συστήματος
Εικόνες από δίκτυοΝαιΜέχρι την εκκαθάριση συστήματος
Αρχεία καταγραφής εντοπισμού σφαλμάτωνΥπό όρουςΚαλύτερα στο tmp
Αποθηκεύσεις παιχνιδιώνΌχιΜόνο Documents
Διαμορφώσεις εφαρμογήςΌχιApplication Support

Αν τα δεδομένα δεν μπορούν να ανακτηθούν — η θέση τους δεν είναι στο Caches. Αυτό είναι το απλούστερο κριτήριο: φανταστείτε ότι αύριο το σύστημα διαγράφει όλα τα αρχεία από το Caches. Αν η εφαρμογή συνεχίσει να λειτουργεί σωστά — τα δεδομένα αποθηκεύονται σωστά.

Πώς το σύστημα διαχειρίζεται την εκκαθάριση της cache

Το iOS διαχειρίζεται αυτόματα την εκκαθάριση του Caches Directory, αλλά οι ακριβείς ενεργοποιητές και αλγόριθμοι δεν τεκμηριώνονται από την Apple. Είναι γνωστό ότι το σύστημα μπορεί να διαγράψει αρχεία από το Caches όταν δεν υπάρχει αρκετός χώρος στο δίσκο, καθώς και κατά τη λειτουργία του Offload Unused Apps.

Η διαδικασία εκκαθάρισης είναι διαφανής για την εφαρμογή: το σύστημα διαγράφει αρχεία χωρίς ειδοποίηση. Η εφαρμογή πρέπει να ελέγχει την ύπαρξη του αρχείου πριν από την ανάγνωση και να το δημιουργεί ξανά αν απουσιάζει. Η μη εξάρτηση από μακροπρόθεσμη αποθήκευση — είναι βασική απαίτηση κατά την εργασία με το Caches.

Σύμφωνα με το άρθρο της Apple "File System Basics" (2024), η εφαρμογή δεν πρέπει να υπολογίζει ότι τα αρχεία στο Caches Directory θα είναι διαθέσιμα μεταξύ των συνεδριών. Συνιστάται στους προγραμματιστές να εφαρμόζουν μηχανισμό fallback: όταν το αρχείο cache λείπει — φορτώστε τα δεδομένα από το δίκτυο και αποθηκεύστε τα ξανά στο Caches.

Ξεχωριστό σενάριο — η εκφόρτωση της εφαρμογής (Offload). Κατά την ενεργοποίηση αυτής της λειτουργίας, το iOS διαγράφει την εφαρμογή αλλά διατηρεί το Documents Directory. Το Caches Directory διαγράφεται σε αυτή τη διαδικασία. Ο χρήστης που επανέφερε την εφαρμογή δεν θα λάβει τα δεδομένα cache — η εφαρμογή πρέπει να τα φορτώσει ξανά.

Caches Directory vs Temporary Directory

Η διαφορά μεταξύ Caches και Temporary (tmp) συχνά προκαλεί σύγχυση στους προγραμματιστές. Και οι δύο κατάλογοι αποθηκεύουν προσωρινά δεδομένα, αλλά με διαφορετικές εγγυήσεις διάρκειας ζωής και σκοπό.

ΧαρακτηριστικόCaches DirectoryTemporary Directory
Διάρκεια ζωήςΑπό συνεδρία σε συνεδρία (δεν είναι εγγυημένη)Μόνο εντός της συνεδρίας
Εκκαθάριση από σύστημαΌταν δεν υπάρχει αρκετός χώροςΣτο τέλος συνεδρίας ή επανεκκίνηση
ΣκοπόςCache για επιτάχυνσηΠολύ προσωρινά δεδομένα
ΠαράδειγμαΕικόνες cacheΠροσωρινό αρχείο πριν από εξαγωγή
Αντίγραφο ασφαλείαςΌχιΌχι

Επιλέξτε Caches αν τα δεδομένα είναι χρήσιμο να διατηρηθούν μεταξύ εκκινήσεων της εφαρμογής, αλλά μπορούν να ανακτηθούν. Χρησιμοποιήστε tmp αν τα δεδομένα χρειάζονται μόνο στην τρέχουσα συνεδρία και δεν έχουν αξία μετά τον τερματισμό της εφαρμογής.

Βέλτιστες πρακτικές εργασίας με το Caches

Η εργασία με το Caches Directory απαιτεί τήρηση αρκετών κανόνων που βοηθούν στην αποφυγή απώλειας δεδομένων, απροσδόκητης συμπεριφοράς της εφαρμογής και προβλημάτων απόδοσης.

Ελέγχετε πάντα την ύπαρξη του αρχείου πριν από την ανάγνωση

Το FileManager.fileExists(atPath:) πρέπει να καλείται πριν από κάθε ανάγνωση από το Caches. Αν το αρχείο λείπει — φορτώστε τα δεδομένα από την αρχική πηγή και αποθηκεύστε τα στην cache. Ποτέ μην υποθέτετε ότι το αρχείο από το Caches υπάρχει.

Περιορίστε το μέγεθος της cache

Ορίστε το μέγιστο μέγεθος του Caches Directory στην εφαρμογή. Για παράδειγμα, όριο 50 MB για εικόνες και 10 MB για απαντήσεις JSON. Όταν ξεπεραστεί το όριο, διαγράψτε τα παλαιότερα αρχεία κατά ημερομηνία τροποποίησης.

swift
import Foundation

func trimCache(to maxSizeBytes: Int) {
    let cachesURL = FileManager.default
        .urls(for: .cachesDirectory, in: .userDomainMask)
        .first!

    guard let enumerator = FileManager.default
        .enumerator(
            at: cachesURL,
            includingPropertiesForKeys: [.fileSizeKey, .contentModificationDateKey]
        )
    else { return }

    // Απαρίθμηση και διαγραφή παλιών αρχείων
    // όταν υπερβαίνει το όριο μεγέθους
}

Η τήρηση αυτών των πρακτικών εγγυάται ότι η εφαρμογή λειτουργεί σωστά σε όλες τις ενέργειες εκκαθάρισης cache από το σύστημα, και ο χρήστης δεν αντιμετωπίζει απροσδόκητη απώλεια δεδομένων.

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

Ειδοποιεί το σύστημα την εφαρμογή πριν από την εκκαθάριση του Caches Directory;

Όχι, το iOS δεν στέλνει ειδοποιήσεις πριν από τη διαγραφή αρχείων από το Caches. Η διαδικασία εκκαθάρισης είναι εντελώς διαφανής για την εφαρμογή. Ο μόνος τρόπος να μάθετε για τη διαγραφή — κατά την προσπάθεια ανάγνωσης του αρχείου, το FileManager επιστρέφει nil ή ρίχνει σφάλμα, και η εφαρμογή πρέπει να χειριστεί αυτήν την κατάσταση.

Μπορεί ο χρήστης να εκκαθαρίσει χειροκίνητα το Caches Directory;

Άμεση πρόσβαση στο Caches Directory μέσω Files ή iTunes ο χρήστης δεν έχει. Ωστόσο, ο χρήστης μπορεί να εκκαθαρίσει την cache όλων των εφαρμογών μέσω Ρυθμίσεις > Γενικά > Αποθηκευτικός χώρος, επιλέγοντας μια συγκεκριμένη εφαρμογή και πατώντας "Εκφόρτωση εφαρμογής". Το iOS μπορεί επίσης να εκκαθαρίζει αυτόματα την cache όταν δεν υπάρχει αρκετός χώρος.

Σε τι διαφέρει το URLCache από τη χειροκίνητη αποθήκευση στο Caches Directory;

Το URLCache — είναι ένας ενσωματωμένος μηχανισμός caching HTTP αιτημάτων από το Foundation. Αποθηκεύει και φορτώνει αυτόματα τις απαντήσεις cache, χρησιμοποιώντας το Caches Directory στο παρασκήνιο. Η χειροκίνητη αποθήκευση παρέχει περισσότερο έλεγχο: μπορείτε να επιλέξετε μορφή, να κρυπτογραφήσετε δεδομένα και να διαχειριστείτε τη διάρκεια ζωής κάθε αρχείου ξεχωριστά.

Τι συμβαίνει με το Caches Directory κατά την ενημέρωση της εφαρμογής;

Κατά την ενημέρωση της εφαρμογής μέσω του App Store, το Caches Directory διατηρείται. Ωστόσο, το περιεχόμενο μπορεί να διαγραφεί από το σύστημα αν η νέα ενημέρωση απαιτεί περισσότερο χώρο για εγκατάσταση. Ο προγραμματιστής δεν πρέπει να βασίζεται στη διατήρηση του Caches μετά από ενημέρωση — αυτός είναι ένας επιπλέον λόγος για την εφαρμογή μηχανισμού fallback.

Πώς να απενεργοποιήσετε το αυτόματο caching για το NSURLSession;

Ορίστε το URLCache σε nil για μια συγκεκριμένη συνεδρία NSURLSession ή χρησιμοποιήστε την πολιτική caching .reloadIgnoringLocalCacheData. Μπορείτε επίσης να δημιουργήσετε μια διαμόρφωση URLSessionConfiguration με κενή cache: sessionConfiguration.urlCache = nil. Αυτό είναι χρήσιμο για δεδομένα που πρέπει να είναι πάντα ενημερωμένα.

Σύνοψη

  • Caches Directory — προσωρινή αποθήκευση για δεδομένα που μπορούν να ανακτηθούν από το δίκτυο ή να αναδημιουργηθούν.
  • Το σύστημα iOS μπορεί ανά πάσα στιγμή να διαγράψει αρχεία από το Caches χωρίς ειδοποίηση της εφαρμογής.
  • Τα δεδομένα από το Caches δεν συμπεριλαμβάνονται στα αντίγραφα ασφαλείας iCloud και iTunes, εξοικονομώντας χώρο.
  • Η διαδρομή προς τον κατάλογο — FileManager.urls(for: .cachesDirectory) στη Swift ή NSSearchPathForDirectoriesInDomains στην Objective-C.
  • Στο Caches αποθηκεύονται εικόνες cache, απαντήσεις JSON API και άλλα ανακτήσιμα δεδομένα.
  • Σε αντίθεση με το tmp, το Caches μπορεί να διατηρήσει δεδομένα μεταξύ εκκινήσεων, αλλά χωρίς εγγύηση.
  • Πάντα ελέγχετε την ύπαρξη του αρχείου πριν από την ανάγνωση από το Caches και εφαρμόστε φόρτωση fallback.

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

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

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

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