Temporary Directory — τι είναι, προσωρινά αρχεία και διαχείριση αποθήκευσης

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

Temporary Directory (tmp) — είναι ένας κατάλογος στο sandbox της εφαρμογής iOS για την αποθήκευση πολύ βραχύχρονων δεδομένων που χρειάζονται μόνο στην τρέχουσα συνεδρία της εφαρμογής. Σύμφωνα με το Apple File System Programming Guide (2024), το σύστημα μπορεί να καθαρίσει το tmp σε κάθε λήξη της εφαρμογής ή κατά την επανεκκίνηση της συσκευής. Σε αντίθεση με το Caches Directory, τα προσωρινά αρχεία στο tmp δεν προορίζονται για αποθήκευση μεταξύ εκκινήσεων — ο προγραμματιστής πρέπει να τα διαγράφει ρητά μετά τη χρήση για να μην καταλαμβάνει χώρο στο δίσκο.

Βασικά σημεία

  • Temporary Directory — κατάλογος για δεδομένα που χρειάζονται μόνο στην τρέχουσα συνεδρία της εφαρμογής.
  • Το σύστημα iOS μπορεί να καθαρίσει το tmp κατά την επανεκκίνηση της συσκευής ή τη λήξη της εφαρμογής.
  • Τα αρχεία από το tmp δεν συμπεριλαμβάνονται στα αντίγραφα ασφαλείας iCloud και iTunes.
  • Η διαδρομή προς το tmp λαμβάνεται μέσω NSTemporaryDirectory() σε Swift ή Objective-C.
  • Ο προγραμματιστής πρέπει να διαγράφει ο ίδιος τα αρχεία από το tmp μετά τη χρήση.

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

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

Το iOS παρέχει το tmp για λειτουργίες που απαιτούν ενδιάμεση αποθήκευση αρχείων: λήψη αρχείου πριν τη μετακίνηση στο Documents, δημιουργία προσωρινού αντιγράφου πριν την εξαγωγή, προσωρινή αποθήκευση δεδομένων ροής. Μετά την ολοκλήρωση της λειτουργίας, τα προσωρινά αρχεία πρέπει να διαγραφούν.

Σύμφωνα με το Apple Developer Documentation (2024), ο κατάλογος tmp είναι μοναδικός επειδή η διαδρομή του μπορεί να αλλάζει μεταξύ εκκινήσεων της εφαρμογής. Το iOS δημιουργεί μια νέα διαδρομή προς το tmp σε κάθε εκκίνηση — αυτό εγγυάται ότι τα δεδομένα από την προηγούμενη συνεδρία δεν θα διαβαστούν κατά λάθος. Ο προγραμματιστής δεν πρέπει ποτέ να αποθηκεύει τη διαδρομή προς το tmp μεταξύ εκκινήσεων.

Σημαντικό: σε αντίθεση με το Caches Directory, όπου τα δεδομένα μπορούν να επιζήσουν πολλές εκκινήσεις, το tmp δεν εγγυάται την αποθήκευση δεδομένων μεταξύ συνεδριών μακροπρόθεσμα. Αυτός είναι ο πιο αξιόπιστος τρόπος αποθήκευσης πραγματικά προσωρινών δεδομένων.

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

Σε Swift για τη λήψη της διαδρομής προς το tmp χρησιμοποιείται η συνάρτηση NSTemporaryDirectory() ή το FileManager.temporaryDirectory. Αυτό είναι το απλούστερο API μεταξύ όλων των καταλόγων του sandbox.

swift
import Foundation

// Επιλογή 1: NSTemporaryDirectory()
let tempDir = NSTemporaryDirectory()
let tempFile = (tempDir as NSString)
    .appendingPathComponent("export_temp.pdf")

// Επιλογή 2: FileManager.temporaryDirectory (URL)
let tempURL = FileManager.default.temporaryDirectory
let exportURL = tempURL.appendingPathComponent("export_temp.pdf")

Το Objective-C χρησιμοποιεί την ίδια συνάρτηση NSTemporaryDirectory(). Το αποτέλεσμα είναι ένα συμβολοσειρά με την πλήρη διαδρομή προς τον προσωρινό κατάλογο της εφαρμογής.

objective-c
@import Foundation;

NSString *tempDir = NSTemporaryDirectory();
NSString *tempFile = [tempDir stringByAppendingPathComponent:@"temp_data.bin"];

Η κυριότερη διαφορά από τους άλλους καταλόγους: η NSTemporaryDirectory() δεν απαιτεί καθορισμό τομέα ή μάσκας — είναι μία συνάρτηση. Ωστόσο, η διαδρομή μπορεί να αλλάξει στην επόμενη εκκίνηση, γι'αυτό μην την αποθηκεύετε ποτέ σε UserDefaults ή άλλη μόνιμη αποθήκευση.

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

Temporary Directory προορίζεται για ένα αυστηρώς καθορισμένο σύνολο σεναρίων. Οι προγραμματιστές συχνά συγχέουν το tmp με το Caches, τοποθετώντας στο tmp δεδομένα που θα έπρεπε να ζουν περισσότερο από μία συνεδρία. Ας δούμε τις σωστές περιπτώσεις χρήσης.

Ενδιάμεσα αρχεία κατά την εξαγωγή

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

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

Προσωρινά buffer για εγγραφή ήχου, βίντεο ή δεδομένων ροής που επεξεργάζονται σε πραγματικό χρόνο. Για παράδειγμα, εγγραφή φωνής πριν την αποθήκευση σε μόνιμη αποθήκευση ή προσωρινή αποθήκευση ροής βίντεο κατά τη ροή μετάδοσης.

ΣενάριοΚατάλογοςΑιτιολόγηση
Εξαγωγή PDF πριν την αποστολήtmpΤο αρχείο δεν χρειάζεται μετά την αποστολή
Μνήμη εικόνωνCachesΧρήσιμο μεταξύ συνεδριών
Λήψη αρχείου πριν τη μετακίνησηtmpΕνδιάμεση αποθήκευση
Αρχεία συνεδρίαςtmpΙσχύουν μόνο στη συνεδρία
Επεξεργασία εγγράφουtmpΈκδοση πριν την αποθήκευση

Εάν τα δεδομένα χρειάζονται μόνο εδώ και τώρα — χρησιμοποιήστε tmp. Εάν μπορούν να είναι χρήσιμα στην επόμενη συνεδρία — χρησιμοποιήστε Caches. Εάν η απώλεια δεδομένων είναι απαράδεκτη — χρησιμοποιήστε Documents.

Κύκλος ζωής προσωρινών αρχείων

Το iOS διαχειρίζεται τον κύκλο ζωής του tmp διαφορετικά από τους άλλους καταλόγους του sandbox. Η κατανόηση αυτού του κύκλου είναι κρίσιμη για τον σωστό σχεδιασμό της αποθήκευσης αρχείων στην εφαρμογή.

Σε κάθε εκκίνηση της εφαρμογής, το iOS μπορεί να διατίθεσει μια νέα διαδρομή για το tmp. Η προηγούμενη διαδρομή κατασταίνεται μη προσβάσιμη, αν και τα φυσικά αρχεία μπορούν να παραμείνουν στο δίσκο μέχρι την επανεκκίνηση της συσκευής. Για αυτόν τον λόγο, η Apple συστήνει να μην αποθηκεύετε τη διαδρομή προς το tmp μεταξύ συνεδριών.

Σύμφωνα με το Apple Tech Note TN2150 (2024), το σύστημα μπορεί να καθαρίσει το tmp στις ακόλουθες περιπτώσεις: κατά την επανεκκίνηση της συσκευής, όταν ξεπεραστεί το όριο χώρου στο δίσκο, κατά την αποεκφόρτωση της εφαρμογής (Offload). Σε αντίθεση με το Caches, το tmp δεν προορίζεται για την αποθήκευση δεδομένων ακόμη και σε πολλές εκκινήσεις — είναι η πιο αναξιόπιστη αποθήκευση στο sandbox.

Ο προγραμματιστής είναι υποχρεωμένος να διαγράφει ρητά τα προσωρινά αρχεία μετά την ολοκλήρωση της λειτουργίας χρησιμοποιώντας το FileManager.removeItem(at:). Τα αρχεία που δεν διαγράφονται συσσωρεύονται στο tmp και καταλαμβάνουν χώρο στο δίσκο — το iOS δεν εγγυάται τον αυτόματο καθαρισμό τους στο κοντινό μέλλον.

Temporary Directory vs Caches Directory

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

ΠαράμετροςTemporary DirectoryCaches Directory
Διάρκεια ζωήςΜόνο τρέχουσα συνεδρίαΜεταξύ συνεδριών (χωρίς εγγύηση)
Αλλαγή διαδρομήςΜπορεί να αλλάζει κάθε εκκίνησηΣταθερή διαδρομή
Αυτόματος καθαρισμόςΣε επανεκκίνηση, αποεκφόρτωσηΣε έλλειψη χώρου
Διαγραφή από προγραμματιστήΥποχρεωτική μετά τη λειτουργίαΣυνιστάται κατά υπέρβαση ορίου
ΧρήσηΕνδιάμεσες λειτουργίεςΜόνιμη κρυπτή μνήμη

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

Καλύτερες πρακτικές για εργασία με το tmp

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

Να διαγράφετε πάντα τα αρχεία μετά τη χρήση

Το FileManager.removeItem(at:) πρέπει να καλείται αμέσως μετά την ολοκλήρωση της λειτουργίας με το προσωρινό αρχείο. Χρησιμοποιήστε defer σε Swift για εγγυημένη διαγραφή ακόμη και σε περίπτωση σφάλματος.

swift
import Foundation

let tempURL = FileManager.default
    .temporaryDirectory
    .appendingPathComponent("upload_temp.dat")

defer {
    try? FileManager.default.removeItem(at: tempURL)
}

// Εργασία με προσωρινό αρχείο
try "temporary data".write(to: tempURL, atomically: true)
// ... λειτουργία αρχείου ...
// το defer εκτελείται κατά την έξοδο από το πεδίο

Μην χρησιμοποιείτε το tmp για μακρόβια δεδομένα

Εάν τα δεδομένα μπορεί να χρειαστούν μία ώρα μετά τη δημιουργία — αποθηκεύστε τα σε Caches ή Application Support. Το tmp προορίζεται για λειτουργίες λεπτών, όχι για αποθήκευση.

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

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

Μπορεί η διαδρομή προς το Temporary Directory να αλλάξει κατά τη λειτουργία της εφαρμογής;

Συνήθως η διαδρομή δεν αλλάζει σε μία συνεδρία, αλλά το iOS δεν δίνει εγγυήσεις. Σε σπάνιες περιπτώσεις, το σύστημα μπορεί να αλλάξει το tmp κατά τη μετάβαση της εφαρμογής από το υπόβαθρο σε ενεργή κατάσταση. Για αυτό η Apple συνιστά να λαμβάνετε τη διαδρομή προς το tmp μέσω NSTemporaryDirectory() σε κάθε κλήση, αντί να την αποθηκεύετε σε μεταβλητή.

Τι θα συμβεί εάν δεν διαγράψω τα αρχεία από το tmp;

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

Είναι κατάλληλο το tmp για κρυπτογράφηση προσωρινών δεδομένων;

Ναι, μπορείτε να χρησιμοποιήσετε DataProtectionType με NSFileProtectionComplete για προσωρινά αρχεία που περιέχουν ευαίσθητα δεδομένα. Ωστόσο, θυμηθείτε: εάν το αρχείο διαβαστεί μόνο στην τρέχουσα συνεδρία και στη συνέχεια διαγραφεί — η κρυπτογράφηση μπορεί να είναι υπερβολική. Αξιολογήστε την ανάγκη κρυπτογράφησης βάσει του τύπου των δεδομένων.

Πώς να δημιουργήσω ένα μοναδικό όνομα αρχείου στο tmp χωρίς συγκρούσεις;

Χρησιμοποιήστε ProcessInfo.processInfo.globallyUniqueString για τη δημιουργία ενός μοναδικού αναγνωριστικού ή UUID().uuidString. Το FileManager παρέχει επίσης τη μέθοδο urlForCreatingTemporaryFile η οποία δημιουργεί αυτόματα ένα μοναδικό όνομα στο tmp. Αυτό εγγυάται την απουσία συγκρούσεων κατά την παράλληλη εγγραφή.

Επηρεάζει το μέγεθος του tmp την αξιολόγηση στο App Store;

Έμμεσα — ναι. Η Apple δίνει προσοχή στο συνολικό μέγεθος των δεδομένων που αποθηκεύει η εφαρμογή στο δίσκο. Εάν το tmp περιέχει γιγαμπύρες αρχείων που δεν έχουν διαγραφεί, ο αξιολογητής μπορεί να απορρίψει την εφαρμογή. Το συνιστώμενο όριο για το tmp είναι το πολύ 100 MB ανά πάσα στιγμή. Καθαρίζετε το tmp τακτικά και ελέγχετε το μέγεθός του μέσω FileManager.

Σύνοψη

  • Temporary Directory (tmp) — κατάλογος για δεδομένα των οποίων η διάρκεια ζωής περιορίζεται στην τρέχουσα συνεδρία της εφαρμογής.
  • Η διαδρομή προς το tmp μπορεί να αλλάξει μεταξύ εκκινήσεων — μην την αποθηκεύετε σε μόνιμη αποθήκευση.
  • Το σύστημα μπορεί να καθαρίσει το tmp κατά την επανεκκίνηση της συσκευής ή την αποεκφόρτωση της εφαρμογής.
  • Τα αρχεία από το tmp δεν συμπεριλαμβάνονται στα αντίγραφα ασφαλείας iCloud και iTunes.
  • Σε αντίθεση με το Caches Directory, το tmp δεν προορίζεται για αποθήκευση μεταξύ συνεδριών.
  • Ο προγραμματιστής πρέπει να διαγράφει ρητά τα προσωρινά αρχεία με FileManager.removeItem.
  • Χρησιμοποιήστε defer σε Swift για εγγυημένη διαγραφή των προσωρινών αρχείων σε οποιοδήποτε αποτέλεσμα της λειτουργίας.

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

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

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

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