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% من المطورين يضعون بشكل غير صحيح في Caches بيانات يجب أن تكون في Documents أو Application Support بسبب عدم فهم الفروق بين هذه الأدلة.

خاصية حرجة لـ 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 }

// Save cached 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: فهو آمن من حيث النوع ويتكامل بشكل أفضل مع الأطر الحديثة مثل SwiftUI و Combine.

ما البيانات التي تخزنها في Caches

Caches Directory مثالي لعدة فئات من البيانات التي يستخدمها التطبيق لتسريع الأداء، لكنه ليس المصدر الوحيد للحقيقة. اختيار البيانات الصحيحة للتخزين المؤقت يؤثر مباشرة على تجربة المستخدم وأداء التطبيق.

استجابات الشبكة المخزنة مؤقتاً

استجابات JSON من APIs، وبيانات خلاصات الأخبار، وقوائم الكائنات — كل ما يمكن للتطبيق إعادة تحميله من الخادم. استخدم URLCache للتخزين المؤقت التلقائي لاستجابات HTTP أو احفظ الكائنات المسلسلة يدوياً.

الصور وملفات الوسائط

الصور التي تم تنزيلها من الشبكة هي حالة الاستخدام الأكثر شيوعاً لـ Caches Directory. المكتبات مثل SDWebImage و Kingfisher تحفظ الصور المخزنة مؤقتاً في Caches بشكل افتراضي.

نوع البياناتمناسب لـ Cachesفترة الاحتفاظ
JSON استجابات APIنعمحتى تنظيف النظام
صور من الشبكةنعمحتى تنظيف النظام
سجلات التصحيحبشروطالأفضل في tmp
حفظ الألعابلاDocuments فقط
إعدادات التطبيقلاApplication Support

إذا كان لا يمكن استعادة البيانات، فهي ليست مكانها في Caches. هذا هو أبسط معيار: تخيل أن النظام غداً سيحذف جميع الملفات من Caches. إذا استمر التطبيق في العمل بشكل صحيح، فإن البيانات مخزنة بشكل صحيح.

كيف يدير النظام تنظيف التخزين المؤقت

iOS يدير تلقائياً تنظيف Caches Directory، لكن المحفزات والخوارزميات الدقيقة غير موثقة من قبل Apple. من المعروف أن النظام يمكنه حذف الملفات من Caches عند نقص مساحة القرص، وكذلك عند تفعيل ميزة Offload Unused Apps.

عملية التنظيف شفافة بالنسبة للتطبيق: النظام يحذف الملفات بدون إشعار. يجب على التطبيق التحقق من وجود الملف قبل القراءة وإنشائه من جديد إذا كان غائباً. عدم الاعتماد على التخزين طويل الأمد هو مطلب أساسي عند العمل مع Caches.

وفقاً لمقال Apple «File System Basics» (2024)، لا يجب على التطبيق توقع أن الملفات في Caches Directory ستكون متاحة بين الجلسات. يُنصح المطورون بتنفيذ آلية احتياطية: إذا كان ملف التخزين المؤقت مفقوداً، قم بتنزيل البيانات من الشبكة وحفظها في 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 في تطبيقك. على سبيل المثال، حد 50 ميجابايت للصور و 10 ميجابايت لاستجابات 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 }

    // Enumerate and remove old files
    // when exceeding size limit
}

اتباع هذه الممارسات يضمن أن التطبيق يعمل بشكل صحيح بغض النظر عن إجراءات تنظيف التخزين المؤقت للنظام، وألا يواجه المستخدمون فقداناً غير متوقع للبيانات.

الأسئلة المتكررة

هل يقوم النظام بإشعار التطبيق قبل تنظيف 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 بعد التحديث — وهذا سبب إضافي لتنفيذ آلية احتياطية.

كيفية تعطيل التخزين المؤقت التلقائي لـ NSURLSession؟

قم بتعيين URLCache إلى nil لجلسة NSURLSession محددة أو استخدم سياسة التخزين المؤقت .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 ونفذ التحميل الاحتياطي.

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا