Caches Directory: چیست، مدیریت کش و پاک‌سازی داده‌ها

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

Caches Directory — دایرکتوری در sandbox برنامه iOS است که برای ذخیره داده‌های موقتی در نظر گرفته شده که می‌توانند از شبکه بازیابی یا دوباره بارگذاری شوند. بر اساس Apple File System Basics (2024)، سیستم می‌تواند در هر لحظه فایل‌ها را از Caches Directory حذف کند تا فضای دیسک آزاد شود — برنامه باید عدم وجود این فایل‌ها را به درستی مدیریت کرده و در صورت نیاز آنها را بازیابی کند. برخلاف Documents Directory، داده‌های Caches در پشتیبان‌گیری iCloud و iTunes گنجانده نمی‌شوند که بار ذخیره‌سازی ابری کاربر را کاهش می‌دهد.

نکات کلیدی

  • 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 برای قرار دادن پاسخ‌های شبکه کش شده، تصاویر از پیش بارگذاری شده، اشیاء سریال‌سازی شده و داده‌هایی که برنامه می‌تواند بازیابی کند استفاده می‌کند. توسعه‌دهنده نباید به ذخیره‌سازی طولانی‌مدت داده‌ها در این دایرکتوری تکیه کند.

بر اساس داده‌های Apple WWDC 2020، حدود 40٪ از برنامه‌های iOS از Caches Directory برای ذخیره تصاویر کش شده و داده‌های شبکه استفاده می‌کنند، در حالی که 25٪ از توسعه‌دهندگان به دلیل عدم درک تفاوت بین این دایرکتوری‌ها، داده‌هایی را که باید در Documents یا Application Support باشند به اشتباه در Caches قرار می‌دهند.

ویژگی حیاتی Caches: برنامه باید وضعیتی را که فایل کش توسط سیستم حذف شده به درستی مدیریت کند. اگر پس از حذف کش عملکرد برنامه مختل شود — یعنی داده‌ها در دایرکتوری اشتباهی ذخیره شده‌اند.

چگونه مسیر 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 }

// ذخیره 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 API Swift را توصیه می‌کند، کد 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 باید API مبتنی بر URL را ترجیح دهند: این API از نظر نوع ایمن است و با فریمورک‌های مدرنی مانند SwiftUI و Combine بهتر یکپارچه می‌شود.

چه داده‌هایی را در Caches ذخیره کنیم

Caches Directory برای چند دسته داده که برنامه برای سرعت بخشیدن به کار از آنها استفاده می‌کند بهینه است، اما تنها منبع حقیقت نیست. انتخاب صحیح داده‌ها برای کش کردن مستقیماً بر UX و عملکرد برنامه تأثیر می‌گذارد.

پاسخ‌های شبکه کش شده

پاسخ‌های JSON از API، داده‌های فید خبری، لیست اشیاء — هر چیزی که برنامه می‌تواند دوباره از سرور بارگیری کند. برای کش خودکار پاسخ‌های HTTP از URLCache استفاده کنید یا اشیاء سریال‌سازی شده را به صورت دستی ذخیره کنید.

تصاویر و فایل‌های رسانه‌ای

تصاویر بارگیری شده از شبکه — رایج‌ترین مورد استفاده از Caches Directory. کتابخانه‌هایی مانند SDWebImage و Kingfisher به طور پیش‌فرض تصاویر کش شده را دقیقاً در Caches ذخیره می‌کنند.

نوع دادهمناسب برای Cachesمدت نگهداری
JSON پاسخ‌های APIبلهتا پاک‌سازی سیستم
تصاویر از شبکهبلهتا پاک‌سازی سیستم
لاگ‌های اشکال‌زداییمشروطبهتر در tmp
ذخیره‌های بازیخیرفقط Documents
تنظیمات برنامهخیرApplication Support

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

سیستم چگونه پاک‌سازی کش را مدیریت می‌کند

iOS به طور خودکار پاک‌سازی Caches Directory را مدیریت می‌کند، اما محرک‌ها و الگوریتم‌های دقیق توسط Apple مستند نشده‌اند. مشخص است که سیستم می‌تواند هنگام کمبود فضای دیسک و همچنین در هنگام عملکرد ویژگی Offload Unused Apps فایل‌ها را از Caches حذف کند.

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

بر اساس مقاله Apple "File System Basics" (2024)، برنامه نباید روی در دسترس بودن فایل‌های Caches Directory بین جلسات حساب کند. به توسعه‌دهندگان توصیه می‌شود مکانیزم fallback را پیاده‌سازی کنند: در صورت نبودن فایل کش — داده‌ها را از شبکه بارگیری کرده و دوباره در Caches ذخیره کنید.

سناریوی جداگانه — تخلیه برنامه (Offload). هنگام فعال شدن این ویژگی، iOS برنامه را حذف می‌کند اما Documents Directory آن را حفظ می‌کند. Caches Directory در این فرآیند حذف می‌شود. کاربری که برنامه را بازیابی کرده داده‌های کش شده را دریافت نخواهد کرد — برنامه باید آنها را دوباره بارگیری کند.

Caches Directory در مقابل Temporary Directory

تفاوت بین Caches و Temporary (tmp) اغلب باعث سردرگمی در بین توسعه‌دهندگان می‌شود. هر دو دایرکتوری داده‌های موقت را ذخیره می‌کنند، اما با تضمین‌های متفاوت طول عمر و هدف.

ویژگیCaches DirectoryTemporary Directory
طول عمراز جلسه به جلسه (تضمین نشده)فقط در چارچوب جلسه
پاک‌سازی توسط سیستمهنگام کمبود فضاپایان جلسه یا راه‌اندازی مجدد
هدفکش برای سرعت بخشیدن به کارداده‌های بسیار موقت
مثالتصاویر کش شدهفایل موقت قبل از خروجی
پشتیبان‌گیریخیرخیر

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

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

کار با Caches Directory نیازمند رعایت چند قانون است که به جلوگیری از از دست دادن داده‌ها، رفتار غیرمنتظره برنامه و مشکلات عملکرد کمک می‌کند.

همیشه قبل از خواندن وجود فایل را بررسی کنید

FileManager.fileExists(atPath:) باید قبل از هر خواندن از Caches فراخوانی شود. اگر فایل وجود ندارد — داده‌ها را از منبع اصلی بارگیری کرده و در کش ذخیره کنید. هرگز تصور نکنید که فایل از Caches وجود دارد.

اندازه کش را محدود کنید

تعیین کنید حداکثر اندازه Caches Directory در برنامه. به عنوان مثال، محدودیت ۵۰ مگابایت برای تصاویر و ۱۰ مگابایت برای پاسخ‌های 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 }

    // شمارش و حذف فایل‌های قدیمی
    // هنگام تجاوز از محدودیت اندازه
}

رعایت این روش‌ها تضمین می‌کند که برنامه در هرگونه اقدام سیستم برای پاک‌سازی کش به درستی کار کند و کاربر با از دست دادن غیرمنتظره داده‌ها مواجه نشود.

سوالات متداول

آیا سیستم قبل از پاک‌سازی Caches Directory به برنامه اطلاع می‌دهد؟

خیر، iOS قبل از حذف فایل‌ها از Caches اعلانی ارسال نمی‌کند. فرآیند پاک‌سازی کاملاً برای برنامه شفاف است. تنها راه اطلاع از حذف — هنگام تلاش برای خواندن فایل، FileManager nil برمی‌گرداند یا خطا پرتاب می‌کند و برنامه باید این وضعیت را مدیریت کند.

آیا کاربر می‌تواند به صورت دستی Caches Directory را پاک کند؟

دسترسی مستقیم به Caches Directory از طریق Files یا iTunes کاربر ندارد. با این حال، کاربر می‌تواند کش همه برنامه‌ها را از طریق تنظیمات > عمومی > ذخیره‌گاه با انتخاب برنامه خاص و فشار دادن "تخلیه برنامه" پاک کند. همچنین iOS می‌تواند به طور خودکار کش را هنگام کمبود فضا پاک کند.

URLCache چه تفاوتی با ذخیره دستی در Caches Directory دارد؟

URLCache — یک مکانیزم داخلی کش کردن درخواست‌های HTTP از Foundation است. این مکانیزم به طور خودکار پاسخ‌های کش شده را ذخیره و بارگیری می‌کند و از Caches Directory در پشت صحنه استفاده می‌کند. ذخیره دستی کنترل بیشتری می‌دهد: می‌توان فرمت را انتخاب کرد، داده‌ها را رمزنگاری نمود و طول عمر هر فایل را به صورت جداگانه مدیریت کرد.

در هنگام به‌روزرسانی برنامه چه اتفاقی برای Caches Directory می‌افتد؟

در هنگام به‌روزرسانی برنامه از طریق App Store، Caches Directory حفظ می‌شود. با این حال، اگر به‌روزرسانی جدید برای نصب به فضای بیشتری نیاز داشته باشد، محتوا ممکن است توسط سیستم حذف شود. توسعه‌دهنده نباید به حفظ Caches پس از به‌روزرسانی تکیه کند — این دلیل اضافی برای پیاده‌سازی مکانیزم fallback است.

چگونه کش خودکار را برای NSURLSession غیرفعال کنیم؟

URLCache را برای جلسه خاص NSURLSession nil قرار دهید یا از سیاست کش .reloadIgnoringLocalCacheData استفاده کنید. همچنین می‌توانید پیکربندی URLSessionConfiguration با کش خالی ایجاد کنید: sessionConfiguration.urlCache = nil. این برای داده‌هایی که همیشه باید به‌روز باشند مفید است.

خلاصه

  • Caches Directory — ذخیره‌سازی موقت برای داده‌هایی که می‌توان از شبکه بازیابی یا دوباره ایجاد کرد.
  • سیستم iOS می‌تواند در هر لحظه فایل‌ها را از Caches بدون اطلاع برنامه حذف کند.
  • داده‌های Caches در پشتیبان‌گیری iCloud و iTunes گنجانده نمی‌شوند که باعث صرفه‌جویی در فضا می‌شود.
  • مسیر دایرکتوری — FileManager.urls(for: .cachesDirectory) در Swift یا NSSearchPathForDirectoriesInDomains در Objective-C.
  • در Caches تصاویر کش شده، پاسخ‌های JSON API و سایر داده‌های قابل بازیابی ذخیره می‌شوند.
  • برخلاف tmp، Caches می‌تواند داده‌ها را بین راه‌اندازی‌ها نگه دارد، اما بدون تضمین.
  • همیشه وجود فایل را قبل از خواندن از Caches بررسی کنید و بارگیری fallback را پیاده‌سازی کنید.

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

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

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

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