Caches Directory: ความหมาย การจัดการแคช และการล้างข้อมูล

ผู้แต่ง: IT Sectr เผยแพร่เมื่อ: 2026-07-10 เวลาอ่าน: 10 นาที

Caches Directory คือไดเรกทอรีภายในแซนด์บ็อกซ์ของแอปพลิเคชัน 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 คือไดเรกทอรีภายในแซนด์บ็อกซ์ของแอปพลิเคชัน 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 จะแนะนำ Swift API แต่โค้ด 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 เหมาะสมที่สุดสำหรับข้อมูลหลายประเภทที่แอปพลิเคชันใช้เพื่อเพิ่มประสิทธิภาพ แต่ไม่ใช่แหล่งข้อมูลเดียว การเลือกข้อมูลที่เหมาะสมสำหรับการแคชส่งผลโดยตรงต่อ UX และประสิทธิภาพของแอปพลิเคชัน

การตอบสนองเครือข่ายที่ถูกแคช

การตอบสนอง JSON จาก API ข้อมูลฟีดข่าว รายการอ็อบเจกต์ ทุกสิ่งที่แอปพลิเคชันสามารถดาวน์โหลดซ้ำจากเซิร์ฟเวอร์ ใช้ 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 MB สำหรับรูปภาพและ 10 MB สำหรับการตอบสนอง 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 อย่างไรก็ตาม พวกเขาสามารถล้างแคชของแอปพลิเคชันทั้งหมดผ่าน Settings > General > Storage เลือกแอปพลิเคชันเฉพาะและแตะ “Offload App” 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 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

ปรึกษาโครงการ

อ่านเพิ่มเติม