Temporary Directory (tmp) — bu iOS ilovasining sandboxidagi juda qisqa muddatli ma'lumotlarni saqlash uchun mo‘ljallangan katalog bo‘lib, ular faqat joriy ilova sessiyasida kerak bo‘ladi. Apple File System Programming Guide (2024) ma'lumotlariga ko‘ra, tizim har bir ilova tugatilganda yoki qurilma qayta ishga tushirilganda tmp-ni tozalashi mumkin. Caches Directory-dan farqli o‘laroq, tmp-dagi vaqtinchalik fayllar ishga tushirishlar o‘rtasida saqlash uchun mo‘ljallanmagan — dasturchi ulardan foydalangandan so‘ng ularni aniq o‘chirishi kerak, aks holda diskda joy egallaydi.
Asosiy
Temporary Directory (shuningdek tmp nomi bilan tanilgan) — bu iOS ilovasi sandboxi ichidagi katalog bo‘lib, umri joriy sessiya bilan chegaralangan ma'lumotlarni saqlash uchun mo‘ljallangan. Bu sandboxning barcha kataloglari orasida eng qisqa muddatli xotiradir.
iOS tmp-ni oraliq fayl saqlashni talab qiladigan operatsiyalar uchun taqdim etadi: faylni Documents-ga ko‘chirishdan oldin yuklab olish, eksport qilishdan oldin vaqtinchalik nusxa yaratish, oqim ma'lumotlarini buferlash. Operatsiya tugagandan so‘ng, vaqtinchalik fayllar o‘chirilishi kerak.
Apple Developer Documentation (2024) ma'lumotlariga ko‘ra, tmp katalogi noyobdir, chunki uning yo‘li ilova ishga tushirishlari o‘rtasida o‘zgarishi mumkin. iOS har bir ishga tushirishda tmp uchun yangi yo‘l yaratadi — bu oldingi sessiya ma'lumotlarining tasodifan o‘qilmasligini ta'minlaydi. Dasturchi hech qachon tmp yo‘lini ishga tushirishlar o‘rtasida saqlamasligi kerak.
Muhim: Caches Directory-dan farqli o‘laroq, bu erda ma'lumotlar bir necha ishga tushirishni omon qolishi mumkin, tmp esa uzoq muddatli istiqbolda sessiyalar o‘rtasida ma'lumot saqlashni kafolatlamaydi. Bu haqiqatan vaqtinchalik ma'lumotlarni saqlashning eng ishonchli usulidir.
Swift-da tmp-ga yo‘l olish uchun NSTemporaryDirectory() global funksiyasidan yoki FileManager.temporaryDirectory-dan foydalaniladi. Bu sandboxning barcha kataloglari orasida eng oddiy API-dir.
import Foundation
// Variant 1: NSTemporaryDirectory()
let tempDir = NSTemporaryDirectory()
let tempFile = (tempDir as NSString)
.appendingPathComponent("export_temp.pdf")
// Variant 2: FileManager.temporaryDirectory (URL)
let tempURL = FileManager.default.temporaryDirectory
let exportURL = tempURL.appendingPathComponent("export_temp.pdf")
Objective-C bir xil global funksiyadan NSTemporaryDirectory() foydalanadi. Natija — ilovaning vaqtinchalik katalogiga to‘liq yo‘l bo‘lgan satr.
@import Foundation;
NSString *tempDir = NSTemporaryDirectory();
NSString *tempFile = [tempDir stringByAppendingPathComponent:@"temp_data.bin"];
Boshqa kataloglardan asosiy farq: NSTemporaryDirectory() domen yoki maskani ko‘rsatishni talab qilmaydi — bu global funksiyadir. Biroq, yo‘l keyingi ishga tushirishda o‘zgarishi mumkin, shuning uchun uni hech qachon UserDefaults yoki boshqa doimiy xotirada saqlamang.
Temporary Directory qat’iy belgilangan stsenariylar to‘plami uchun mo‘ljallangan. Dasturchilar tez-tez tmp-ni Caches bilan aralashtirib, tmp-da bir sessiyadan uzoqroq yashashi kerak bo‘lgan ma'lumotlarni joylashtiradilar. Keling, to‘g‘ri foydalanish holatlarini ko‘rib chiqaylik.
Fayllar ma'lumotlar eksporti jarayonida yaratiladi: pochta orqali jo‘natishdan oldin hisobotning vaqtinchalik nusxasi, yuklab olishdan oldin siqilgan arxiv, format konvertatsiyasining oraliq fayli. Eksport tugagandan so‘ng, fayl o‘chirilishi kerak.
Vaqtinchalik buferlar real vaqtda qayta ishlanadigan audio, video yoki oqim ma'lumotlarini yozish uchun. Masalan, doimiy xotirada saqlashdan oldin ovoz yozish yoki striming paytida video oqimini buferlash.
| Stsenariy | Katalog | Asoslash |
|---|---|---|
| Eksport PDF jo‘natishdan oldin | tmp | Fayl jo‘natilgandan so‘ng kerak emas |
| Kesh rasmlar | Caches | Sessiyalar orasida foydali |
| Yuklash faylni ko‘chirishdan oldin | tmp | Oraliq saqlash |
| Jurnallar sessiya | tmp | Faqat sessiyada dolzarb |
| Tahrirlash hujjat | tmp | Saqlashdan oldingi versiya |
Agar ma'lumotlar faqat shu erda va hozir kerak bo‘lsa — tmp dan foydalaning. Agar keyingi sessiyada kerak bo‘lishi mumkin bo‘lsa — Caches dan foydalaning. Agar ma'lumot yo‘qolishi mumkin bo‘lmasa — Documents dan foydalaning.
iOS tmp ning hayot aylanishini sandboxning boshqa kataloglaridan farqli boshqaradi. Ushbu tsiklni tushunish ilovada fayl saqlash tizimini to‘g‘ri loyihalash uchun juda muhimdir.
Har bir ishga tushirishda iOS tmp uchun yangi yo‘l ajratishi mumkin. Oldingi yo‘l mavjud bo‘lmaydi, garchi fizik fayllar qurilma qayta ishga tushirilguncha diskda qolishi mumkin. Aynan shuning uchun Apple tmp yo‘lini sessiyalar orasida saqlashni qat’iy tavsiya etmaydi.
Apple Tech Note TN2150 (2024) ma'lumotlariga ko‘ra, tizim quyidagi hollarda tmp-ni tozalashi mumkin: qurilma qayta ishga tushirilganda, diskdagi joy limitiga erishilganda, ilova tushirilganda (Offload). Caches-dan farqli o‘laroq, tmp bir nechta ishga tushirishlar davomida ham ma'lumot saqlash uchun mo‘ljallanmagan — bu sandboxdagi eng ishonchsiz xotiradir.
Dasturchi FileManager.removeItem(at:) yordamida operatsiya tugagandan so‘ng vaqtinchalik fayllarni aniq o‘chirishi shart. O‘chirilmagan fayllar tmp-da to‘planadi va diskda joy egallaydi — iOS ularning yaqin kelajakda avtomatik tozalanishini kafolatlamaydi.
tmp va Caches ni taqqoslash dasturchilarga saqlash katalogini tanlashda to‘g‘ri qaror qabul qilishga yordam beradi. Tanlovdagi xato ma'lumotlarning muddatidan oldin yo‘qolishiga yoki asossiz joy sarfiga olib kelishi mumkin.
| Parametr | Temporary Directory | Caches Directory |
|---|---|---|
| Hayot davomiyligi | Faqat joriy sessiya | Sessiyalar orasida (kafolatsiz) |
| Yo‘l o‘zgarishi | Har bir ishga tushirishda o‘zgarishi mumkin | Barqaror yo‘l |
| Avtomatik tozalash | Qayta ishga tushirish, tushirishda | Joy yetishmasa |
| O‘chirish dasturchi tomonidan | Operatsiyadan so‘ng majburiy | Limit oshib ketganda tavsiya etiladi |
| Foydalanish | Oraliq operatsiyalar | Doimiy kesh |
Amaliy qoida: yaratilgandan so‘ng bir necha soniya yoki daqiqa ichida o‘chiriladigan ma'lumotlar uchun tmp ni tanlang. Sessiyalar orasida bir necha soat yoki kun davomida saqlashga arziydigan, ammo qayta tiklanadigan ma'lumotlar uchun Caches ni tanlang.
Temporary Directory bilan ishlash intizom talab qiladi: tmp-dagi ma'lumotlar qisqa muddatli bo‘lgani va ularning to‘planishi asossiz joy sarfiga olib kelishi mumkinligi sababli, dasturchi bir necha asosiy amaliyotlarga rioya qilishi kerak.
FileManager.removeItem(at:) vaqtinchalik fayl bilan operatsiya tugagandan so‘ng darhol chaqirilishi kerak. Swift-da xato yuz bersa ham o‘chirishni kafolatlash uchun defer dan foydalaning.
import Foundation
let tempURL = FileManager.default
.temporaryDirectory
.appendingPathComponent("upload_temp.dat")
defer {
try? FileManager.default.removeItem(at: tempURL)
}
// Vaqtinchalik fayl bilan ishlash
try "temporary data".write(to: tempURL, atomically: true)
// ... fayl operatsiyasi ...
// defer doiradan chiqishda bajariladi
Agar ma'lumotlar yaratilgandan bir soat keyin kerak bo‘lishi mumkin bo‘lsa — ularni Caches yoki Application Support da saqlang. tmp daqiqali operatsiyalar uchun mo‘ljallangan, saqlash uchun emas.
Ushbu qoidalarga rioya qilish vaqtinchalik fayllarning to‘planmasligini, disk joyidan samarali foydalanishni va ilova iOS fayl tizimining tozalash stsenariylarini to‘g‘ri boshqarishni kafolatlaydi.
Tez-tez so‘raladigan savollar
Odatda yo‘l bir sessiya davomida o‘zgarmaydi, ammo iOS kafolat bermaydi. Kamdan-kam hollarda, tizim ilova fon rejimidan faol holatga o‘tganda tmp-ni o‘zgartirishi mumkin. Shuning uchun Apple har bir murojaatda NSTemporaryDirectory() orqali tmp yo‘lini olishni tavsiya qiladi, uni o‘zgaruvchida saqlash o‘rniga.
Fayllar to‘planadi va diskda joy egallaydi. iOS qurilma qayta ishga tushirilganda tmp-ni tozalashi mumkin, ammo shu paytgacha ilova disk joyini behuda sarflaydi. Sezilarli to‘planish bo‘lganda, foydalanuvchi xotira sozlamalarida ilova ko‘p joy egallaganini ko‘rishi mumkin.
Ha, maxsus ma'lumotlarni o‘z ichiga olgan vaqtinchalik fayllar uchun NSFileProtectionComplete bilan DataProtectionType dan foydalanishingiz mumkin. Ammo unutmang: agar fayl faqat joriy sessiya davomida o‘qilsa va keyin o‘chirilsa — shifrlash ortiqcha bo‘lishi mumkin. Shifrlash zaruriyatini ma'lumot turiga qarab baholang.
Noyob identifikator yaratish uchun ProcessInfo.processInfo.globallyUniqueString yoki UUID().uuidString dan foydalaning. FileManager shuningdek tmp-da avtomatik ravishda noyob nom yaratadigan urlForCreatingTemporaryFile metodini taqdim etadi. Bu parallel yozishda to‘qnashuvlar bo‘lmasligini kafolatlaydi.
Bilvosita — ha. Apple ilova diskda saqlaydigan ma'lumotlarning umumiy hajmiga e'tibor beradi. Agar tmp o‘chirilmagan fayllarning gigabaytlarini o‘z ichiga olsa, ko‘rib chiquvchi ilovani rad etishi mumkin. Tavsiya etilgan limit — istalgan vaqtda 100 MB dan oshmasligi kerak. Muntazam ravishda tmp-ni tozalang va hajmini FileManager orqali tekshiring.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.