Temporary Directory (tmp) — bu iOS tətbiqinin sandboxunda çox qısamüddətli məlumatların saxlanması üçün nəzərdə tutulmuş kataloqdur, onlar yalnız cari tətbiq sessiyası ərzində lazımdır. Apple File System Programming Guide (2024) məlumatlarına görə, sistem hər tətbiq bağlandıqda və ya cihaz yenidən başladıldıqda tmp-ni təmizləyə bilər. Caches Directory-dən fərqli olaraq, tmp-dəki müvəqqəti fayllar başlatmalar arasında saxlama üçün nəzərdə tutulmayıb — proqramçı istifadədən sonra onları açıq şəkildə silməlidir ki, diskdə yer tutmasın.
Başlıca
Temporary Directory (həmçinin tmp kimi tanınır) — bu iOS tətbiqinin sandboxu daxilindəki kataloqdur, ömrü cari sessiya ilə məhdudlaşan məlumatların saxlanması üçün nəzərdə tutulmuşdur. Bu, sandboxun bütün kataloqları arasında ən qısamüddətli yaddaşdır.
iOS tmp-ni aralıq fayl saxlanması tələb edən əməliyyatlar üçün təqdim edir: faylı Documents-a köçürməzdən əvvəl yükləmə, ixrac etməzdən əvvəl müvəqqəti surət yaratma, axın məlumatlarını buferləşdirmə. Əməliyyat başa çatdıqdan sonra müvəqqəti fayllar silinməlidir.
Apple Developer Documentation (2024) məlumatlarına görə, tmp kataloqu unikaldır çünki onun yolu tətbiqin başlatmaları arasında dəyişə bilər. iOS hər başlatmada tmp üçün yeni yol yaradır — bu, əvvəlki sessiyanın məlumatlarının təsadüfi oxunmamasını təmin edir. Proqramçı heç vaxt tmp yolunu başlatmalar arasında saxlamamalıdır.
Vacibdir: Caches Directory-dən fərqli olaraq, burada məlumatlar bir neçə başlatma davam edə bilər, tmp isə uzunmüddətli perspektivdə sessiyalar arasında məlumat saxlamağı zəmanət etmir. Bu, həqiqətən müvəqqəti məlumatları saxlamağın ən etibarlı üsuludur.
Swift-də tmp-yə yol əldə etmək üçün NSTemporaryDirectory() global funksiyasından və ya FileManager.temporaryDirectory-dən istifadə olunur. Bu, sandboxun bütün kataloqları arasında ən sadə API-dir.
import Foundation
// Seçim 1: NSTemporaryDirectory()
let tempDir = NSTemporaryDirectory()
let tempFile = (tempDir as NSString)
.appendingPathComponent("export_temp.pdf")
// Seçim 2: FileManager.temporaryDirectory (URL)
let tempURL = FileManager.default.temporaryDirectory
let exportURL = tempURL.appendingPathComponent("export_temp.pdf")
Objective-C eyni global funksiyadan NSTemporaryDirectory() istifadə edir. Nəticə — tətbiqin müvəqqəti kataloquna tam yol olan sətir.
@import Foundation;
NSString *tempDir = NSTemporaryDirectory();
NSString *tempFile = [tempDir stringByAppendingPathComponent:@"temp_data.bin"];
Digər kataloqlardan əsas fərq: NSTemporaryDirectory() domen və ya maska göstərməyi tələb etmir — bu global funksiyadır. Lakin yol növbəti başlatmada dəyişə bilər, ona görə onu heç vaxt UserDefaults və ya digər davamlı yaddaşda saxlamayın.
Temporary Directory ciddi müəyyən edilmiş ssenarilər üçün nəzərdə tutulmuşdur. Proqramçılar tez-tez tmp-ni Caches ilə qarışdırır, tmp-də bir sessiyadan daha uzun yaşamalı olan məlumatları yerləşdirirlər. Doğru istifadə hallarına baxaq.
Fayllar məlumat ixracı prosesində yaradılır: poçtla göndərməzdən əvvəl hesabatın müvəqqəti surəti, yükləməzdən əvvəl sıxılmış arxiv, format konvertasiyasının aralıq faylı. İxrac tamamlandıqdan sonra fayl silinməlidir.
Müvəqqəti buferlər real vaxt rejimində emal olunan audio, video və ya axın məlumatlarının yazılması üçün. Məsələn, daimi yaddaşda saxlamaqdan əvvəl səs yazısı və ya striminq zamanı video axınının buferləşdirilməsi.
| Ssenari | Kataloq | |
|---|---|---|
| İxrac PDF göndərməzdən əvvəl | tmp | Fayl göndərildikdən sonra lazım deyil |
| Keş şəkillər | Caches | Sessiyalar arasında faydalı |
| Yükləmə faylı köçürməzdən əvvəl | tmp | Aralıq saxlama |
| Loglar sessiya | tmp | Yalnız sessiya ərzində aktualdır |
| Redaktə sənəd | tmp | Saxlamadan əvvəl versiya |
Əgər məlumatlar yalnız burada və indi lazımdırsa — tmp istifadə edin. Əgər növbəti sessiyada lazım ola bilərsə — Caches istifadə edin. Əgər məlumat itkisi yolverilməzdirsə — Documents istifadə edin.
iOS tmp-nin həyat dövrünü sandboxun digər kataloqlarından fərqli idarə edir. Bu dövrü başa düşmək tətbiqdə fayl saxlama sisteminin düzgün layihələndirilməsi üçün kritik əhəmiyyət daşıyır.
Hər başlatmada iOS tmp üçün yeni yol təyin edə bilər. Əvvəlki yol əlçatmaz olur, baxmayaraq ki, fiziki fayllar cihaz yenidən başalanana qədər diskdə qala bilər. Məhz bu səbəbdən Apple tmp yolunu sessiyalar arasında saxlamağı qəti şəkildə tövsiyə etmir.
Apple Tech Note TN2150 (2024) məlumatlarına görə, sistem aşağıdakı hallarda tmp-ni təmizləyə bilər: cihaz yenidən başaldıqda, diskdə yer limitinə çatıldıqda, tətbiq boşaldıldıqda (Offload). Caches-dən fərqli olaraq, tmp bir neçə başlatma ərzində belə məlumat saxlamaq üçün nəzərdə tutulmayıb — bu, sandboxda ən etibarsız yaddaşdır.
Proqramçı FileManager.removeItem(at:) vasitəsilə əməliyyat bitdikdən sonra müvəqqəti faylları açıq şəkildə silməlidir. Silinməmiş fayllar tmp-də toplanır və diskdə yer tutur — iOS onların yaxın zamanda avtomatik təmizlənməsini zəmanət etmir.
tmp və Caches-in müqayisəsi proqramçılara saxlama kataloqu seçərkən düzgün qərar verməyə kömək edir. Seçimdə səhv ya məlumatların vaxtından əvvəl itirilməsinə, ya da əsassız yer israfına səbəb ola bilər.
| Parametr | Temporary Directory | Caches Directory |
|---|---|---|
| Ömür | Yalnız cari sessiya | Sessiyalar arasında (zəmanətsiz) |
| Yol dəyişikliyi | Hər başlatmada dəyişə bilər | Sabit yol |
| Avtomatik təmizlik | Yenidən başlatma, boşaltma zamanı | Yer çatışmazlığında |
| Silinmə proqramçı tərəfindən | Məcburi əməliyyatdan sonra | Limit aşıldıqda tövsiyə olunur |
| İstifadə | Aralıq əməliyyatlar | Davamlı keş |
Praktik qayda: yaradıldıqdan sonra bir neçə saniyə və ya dəqiqə ərzində silinəcək məlumatlar üçün tmp seçin. Sessiyalar arasında bir neçə saat və ya gün saxlamağa dəyər, lakin bərpa oluna bilən məlumatlar üçün Caches seçin.
Temporary Directory ilə iş intizam tələb edir: tmp-dəki məlumatlar qısamüddətli olduğundan və onların yığılması əsassız yer israfına səbəb ola bildiyindən, proqramçı bir neçə əsas təcrübəyə riayət etməlidir.
FileManager.removeItem(at:) müvəqqəti faylla əməliyyat bitdikdən dərhal sonra çağırılmalıdır. Swift-də xəta baş versə belə silinməni təmin etmək üçün defer istifadə edin.
import Foundation
let tempURL = FileManager.default
.temporaryDirectory
.appendingPathComponent("upload_temp.dat")
defer {
try? FileManager.default.removeItem(at: tempURL)
}
// Müvəqqəti faylla iş
try "temporary data".write(to: tempURL, atomically: true)
// ... fayl əməliyyatı ...
// defer əhatədən çıxıldıqda icra olunur
Əgər məlumatlar yaradıldıqdan bir saat sonra lazım ola bilərsə — onları Caches və ya Application Support-da saxlayın. tmp dəqiqəlik əməliyyatlar üçün nəzərdə tutulub, saxlama üçün deyil.
Bu qaydalara riayət etmək müvəqqəti faylların yığılmamasını, disk yerindən səmərəli istifadəni və tətbiqin iOS fayl sisteminin təmizlik ssenarilərini düzgün idarə etməsini təmin edir.
Tez-tez verilən suallar
Adətən yol bir sessiya ərzində dəyişmir, lakin iOS zəmanət vermir. Nadir hallarda sistem tətbiq fon rejimindən aktiv vəziyyətə keçərkən tmp-ni dəyişə bilər. Buna görə Apple hər müraciətdə NSTemporaryDirectory() vasitəsilə tmp yolunu əldə etməyi tövsiyə edir, onu dəyişəndə saxlamaq əvəzinə.
Fayllar yığılacaq və diskdə yer tutacaq. iOS cihaz yenidən başaldıqda tmp-ni təmizləyə bilər, lakin o vaxta qədər tətbiq disk yerini boş yerə israf edəcək. Əhəmiyyətli yığılma olduqda istifadəçi yaddaş parametrlərində tətbiqin çox yer tutduğunu görə bilər.
Bəli, həssas məlumatları olan müvəqqəti fayllar üçün NSFileProtectionComplete ilə DataProtectionType istifadə edə bilərsiniz. Ancaq unutmayın: əgər fayl yalnız cari sessiya çərçivəsində oxunacaq və sonra silinəcəksə — şifrləmə artıq ola bilər. Şifrləmə ehtiyacını məlumat növünə görə qiymətləndirin.
Unikal identifikator yaratmaq üçün ProcessInfo.processInfo.globallyUniqueString və ya UUID().uuidString istifadə edin. FileManager həmçinin tmp-də avtomatik olaraq unikal ad yaradan urlForCreatingTemporaryFile metodunu təqdim edir. Bu, paralel yazma zamanı toqquşmaların olmamasını təmin edir.
Dolayı yolla — bəli. Apple tətbiqin diskdə saxladığı məlumatların ümumi ölçüsünə diqqət yetirir. Əgər tmp silinməmiş faylların giqabaytlarını ehtiva edirsə, baxışçı tətbiqi rədd edə bilər. Tövsiyə olunan limit — istənilən anda 100 MB-dan çox olmamalıdır. Müztərən tmp-ni təmizləyin və ölçüsünü FileManager vasitəsilə yoxlayın.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun