Temporary Directory — این چیست، فایل‌های موقت و مدیریت ذخیره‌سازی

نویسنده: IT Sectr منتشر شده: 2026-07-10 زمان مطالعه: 10 دقیقه

Temporary Directory (tmp) — این یک دیرکتوری در سندباکس برنامه 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 شناخته می‌شود) — این یک دیرکتوری در داخل سندباکس برنامه iOS است که برای ذخیره داده‌هایی طراحی شده که عمر آن‌ها به جلسه فعلی محدود است. این کوتاه‌مدتترین ذخیره در میان تمام دیرکتوری‌های سندباکس است.

iOS tmp را برای عملیاتی فراهم می‌کند که نیازمند واسطه‌ای ذخیره فایل هستند: دانلود فایل قبل از انتقال به Documents، ایجاد کپی موقت قبل از خروجی، بافر کردن داده‌های جریانی. پس از تکمیل عملیات، فایل‌های موقت باید حذف شوند.

به استناد Apple Developer Documentation (2024)، دیرکتوری tmp منحصر به فرد است زیرا مسیر آن می‌تواند بین بارهای اجرای برنامه تغییر کند. iOS در هر بار اجرا یک مسیر جدید برای tmp تولید می‌کند — این تضمین می‌کند که داده‌های جلسه قبلی به طور تصادفی خوانده نشوند. توسعه‌دهنده هرگز نباید مسیر tmp را بین بارهای اجرا ذخیره کند.

مهم: به عکس Caches Directory، که داده‌ها می‌توانند چند بار اجرا را دوام آورند، tmp ذخیره داده‌ها را بین جلسات در درازمدت تضمین نمی‌کند. این قابل اعتمادترین راه برای ذخیره داده‌های واقعاً موقت است.

چگونه مسیر Temporary Directory را به دست آوریم

در Swift برای دریافت مسیر tmp از تابع سراسری NSTemporaryDirectory() یا FileManager.temporaryDirectory استفاده می‌شود. این ساده‌ترین API در میان تمام دیرکتوری‌های سندباکس است.

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 قرار می‌دهند که باید بیش از یک جلسه عمر کنند. بیاییم موارد استفاده صحیح را بررسی کنیم.

فایل‌های واسطه‌ای در طول خروجی

فایل‌هایی که در فرآیند خروجی داده ایجاد می‌شوند: کپی موقت گزارش قبل از ارسال از طریق ایمیل، آرشیو فشرده شده قبل از دانلود، فایل واسطه‌ای تبدیل فرمت. پس از تکمیل خروجی، فایل باید حذف شود.

بافر کردن داده‌های جریانی

بافرهای موقت برای ضبط صدا، ویدیو یا داده‌های جریانی که در زمان واقعی پردازش می‌شوند. به عنوان مثال، ضبط صدا قبل از ذخیره در حافظه دائم یا بافر کردن جریان ویدیو در حین پخش جریانی.

سناریودیرکتوریتوجیه
خروجی PDF قبل از ارسالtmpفایل پس از ارسال لازم نیست
کش تصاویرCachesبین جلسات مفید است
دانلود فایل قبل از انتقالtmpذخیره واسطه‌ای
سجل‌های جلسهtmpفقط در جلسه معتبر هستند
ویرایش سندtmpنسخه قبل از ذخیره

اگر داده‌ها فقط اینجا و اکنون مورد نیاز هستند — از tmp استفاده کنید. اگر ممکن است در جلسه بعدی مورد نیاز باشند — از Caches استفاده کنید. اگر از دست رفتن داده‌ها قابل قبول نیست — از Documents استفاده کنید.

چرخه حیات فایل‌های موقت

iOS چرخه حیات tmp را متفاوت از سایر دیرکتوری‌های سندباکس مدیریت می‌کند. درک این چرخه برای طراحی صحیح ذخیره فایل در برنامه بسیار مهم است.

در هر بار اجرا برنامه، iOS می‌تواند یک مسیر جدید برای tmp تخصیص دهد. مسیر قبلی غیرقابل دسترس می‌شود، هرچند فایل‌های فیزیکی ممکن است تا راه‌اندازی مجدد دستگاه بر روی دیسک باقی بمانند. دقیقاً به همین دلیل، Apple اکیداً توصیه می‌کند که مسیر tmp را بین جلسات ذخیره نکنید.

به استناد Apple Tech Note TN2150 (2024)، سیستم می‌تواند tmp را در موارد زیر پاک کند: در هنگام راه‌اندازی مجدد دستگاه، در صورت رسیدن به حد فضای دیسک، در هنگام تخلیه برنامه (Offload). به عکس Caches، tmp برای ذخیره داده حتی در چند بار اجرا طراحی نشده است — این غیرقابل اعتمادترین ذخیره در سندباکس است.

توسعه‌دهنده موظف است فایل‌های موقت را پس از تکمیل عملیات با استفاده از FileManager.removeItem(at:) صریحاً حذف کند. فایل‌های حذف نشده در tmp انباشته و فضای دیسک را اشغال می‌دهند — iOS پاکسازی خودکار آن‌ها را در آینده نزدیک تضمین نمی‌کند.

Temporary Directory در مقابل Caches Directory

مقایسه tmp و Caches به توسعه‌دهندگان کمک می‌کند تصمیم صحیحی در انتخاب دیرکتوری برای ذخیره بگیرند. اشتباه در انتخاب می‌تواند منجر به از دست رفتن زودهنگام داده‌ها یا اسراف ناموجه فضا شود.

پارامترTemporary DirectoryCaches Directory
عمرفقط جلسه فعلیبین جلسات (بدون تضمین)
تغییر مسیرمی‌تواند هر بار تغییر کندمسیر پایدار
پاکسازی خودکاردر راه‌اندازی مجدد، تخلیهدر صورت کمبود فضا
حذف توسط توسعه‌دهندهاجباری پس از عملیاتتوصیه شده در صورت تجاوز از حد
کاربردعملیات واسطه‌ایکش مقاوم

قاعده عملی: برای داده‌هایی که ظرف چند ثانیه یا دقیقه پس از ایجاد حذف می‌شوند tmp را انتخاب کنید. برای داده‌هایی که ارزش ذخیره برای چند ساعت یا روز بین جلسات را دارند اما قابل بازیابی هستند Caches را انتخاب کنید.

بهترین روش‌های کار با tmp

کار با Temporary Directory نیازمند انضباط است: زیرا داده‌ها در tmp کوتاه‌مدت هستند و انباشت آن‌ها می‌تواند منجر به اسراف ناموجه فضا شود، توسعه‌دهنده باید چند روش کلیدی را رعایت کند.

همیشه فایل‌ها را پس از استفاده حذف کنید

FileManager.removeItem(at:) باید بلافاصله پس از تکمیل عملیات با فایل موقت فراخوانی شود. در Swift از defer برای حذف تضمینی حتی در صورت بروز خطا استفاده کنید.

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 مگابایت در هر لحظه. منظماً tmp را پاک کنید و اندازه آن را از طریق FileManager بررسی کنید.

نتیجه‌گیری

  • Temporary Directory (tmp) — دیرکتوری برای داده‌هایی که عمر آن‌ها به جلسه فعلی برنامه محدود است.
  • مسیر tmp می‌تواند بین بارهای اجرا تغییر کند — آن را در ذخیره مقاوم ذخیره نکنید.
  • سیستم می‌تواند tmp را در راه‌اندازی مجدد دستگاه یا تخلیه برنامه پاک کند.
  • فایل‌های tmp در پشتیبانگیری iCloud و iTunes قرار نمی‌گیرند.
  • به عکس Caches Directory، tmp برای ذخیره بین جلسات طراحی نشده است.
  • توسعه‌دهنده باید فایل‌های موقت را با FileManager.removeItem صریحاً حذف کند.
  • از defer در Swift برای حذف تضمینی فایل‌های موقت در هر نتیجه عملیات استفاده کنید.

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید