Temporary Directory — มันคืออะไร ไฟล์ชั่วคราว และการจัดการพื้นที่เก็บข้อมูล

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

Temporary Directory (tmp) คือไดเรกทอรีในกล่องทราย (sandbox) ของแอพ 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 (2024) ไดเรกทอรี tmp มีความเป็นเอกลักษณ์เพราะเส้นทางของมันสามารถเปลี่ยนแปลงระหว่างการเปิดใช้งานแอพ iOS สร้างเส้นทาง tmp ใหม่ในทุกการเปิดใช้งาน — ซึ่งช่วยให้แน่ใจว่าข้อมูลจากเซสชันก่อนหน้าจะไม่ถูกอ่านโดยบังเอิญ นักพัฒนาไม่ควรเก็บเส้นทาง tmp ระหว่างการเปิดใช้งาน

สำคัญ: แตกต่างจาก Caches Directory ที่ข้อมูลสามารถอยู่รอดหลายการเปิดใช้งานได้ tmp ไม่รับประกันว่าจะเก็บข้อมูลไว้ระหว่างเซสชันในระยะยาว มันเป็นวิธีที่เชื่อถือได้มากที่สุดในการเก็บข้อมูลชั่วคราวอย่างแท้จริง

วิธีรับเส้นทางไปยัง Temporary Directory

ใน Swift การรับเส้นทางไปยัง tmp ใช้ฟังก์ชันทั่วโลก NSTemporaryDirectory() หรือ FileManager.temporaryDirectory เหล่านี้เป็น API ที่เรียบง่ายที่สุดในบรรดาไดเรกทอรีของกล่องทราย

swift
import Foundation

// Option 1: NSTemporaryDirectory()
let tempDir = NSTemporaryDirectory()
let tempFile = (tempDir as NSString)
    .appendingPathComponent("export_temp.pdf")

// Option 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 vs Caches Directory

การเปรียบเทียบ tmp และ Caches ช่วยให้นักพัฒนาตัดสินใจได้อย่างถูกต้องเมื่อเลือกไดเรกทอรีสำหรับการเก็บข้อมูล การเลือกที่ไม่ถูกต้องอาจนำไปสู่การสูญเสียข้อมูลก่อนกำหนดหรือการใช้พื้นที่ไม่จำเป็น

พารามิเตอร์Temporary DirectoryCaches Directory
อายุการใช้งานเฉพาะเซสชันปัจจุบันระหว่างเซสชัน (ไม่มีการรับประกัน)
การเปลี่ยนเส้นทางอาจเปลี่ยนทุกครั้งที่เปิดใช้งานเส้นทางคงที่
การล้างอัตโนมัติเมื่อรีบูต, เมื่อถอนแอพเมื่อพื้นที่ไม่พอ
การลบโดยนักพัฒนาจำเป็นหลังการดำเนินการแนะนำเมื่อเกินขีดจำกัด
การใช้งานการดำเนินการขั้นกลางแคชถาวร

กฎที่ใช้ได้จริง: เลือก tmp สำหรับข้อมูลที่จะถูกลบภายในไม่กี่วินาทีหรืฤ่ไม่กี่นาทีหลังจากการสร้าง เลือก Caches สำหรับข้อมูลที่มีประโยชน์ในการเก็บไว้หลายชั่วโมงหรือหลายวันระหว่างเซสชัน แต่สามารถสร้างใหม่ได้

แนวปฏิบัติที่ดีในการทำงานกับ tmp

การทำงานกับ Temporary Directory ต้องการวินัย: เนื่องจากข้อมูลใน tmp มีอายุสั้น และการสะสมของมันอาจนำไปสู่การสิ้นเปลาพื้นที่ นักพัฒนาควรปฏิบัติตามแนวปฏิบัติหลักๆ หลายประการ

ลบไฟล์หลังใช้งานทุกครั้ง

FileManager.removeItem(at:) ควรถูกเรียกทันทีหลังจากทำรายการกับไฟล์ชั่วคราวเสร็จสิ้น ใช้ defer ใน Swift เพื่อรับประกันการลบแม้ในกรณีที่เกิดข้อผิดพลาด

swift
import Foundation

let tempURL = FileManager.default
    .temporaryDirectory
    .appendingPathComponent("upload_temp.dat")

defer {
    try? FileManager.default.removeItem(at: tempURL)
}

// Work with temp file
try "temporary data".write(to: tempURL, atomically: true)
// ... file operation ...
// defer executes when scope exits

อย่าใช้ tmp สำหรับข้อมูลที่มีอายุยาว

หากอาจต้องการข้อมูลหลังจากสร้างหนึ่งชั่วโมง — เก็บมันไว้ใน Caches หรือ Application Support tmp ถูกออกแบบมาสำหรับการดำเนินการในระดับนาที ไม่ใช่สำหรับการเก็บข้อมูล

การปฏิบัติตามกฎเหล่านี้จะช่วยให้ไฟล์ชั่วคราวไม่สะสม พื้นที่ดิสก์ถูกใช้อย่างมีประสิทธิภาพ และแอพจัดการกรณีการล้างระบบไฟล์ iOS ได้อย่างถูกต้อง

คำถามที่พบบ่อย

เส้นทางไปยัง Temporary Directory สามารถเปลี่ยนแปลงในขณะที่แอพกำลังทำงานอยู่หรือไม่?

โดยทั่วไปเส้นทางไม่เปลี่ยนในเซสชันเดียวกัน แต่ iOS ไม่รับประกัน ในกรณีที่หากใด ระบบอาจเปลี่ยน tmp เมื่อแอพเคลื่อนย้ายจากเบาะกรองไปยังเบาะหน้า ด้วยเหตุนี້ Apple แนะนำให้เรียก NSTemporaryDirectory() ทุกครั้งที่ต้องการเส้นทาง แทนที่จะเก็บไว้ในตัวแปร

จะเกิดอะไรขึ้นหากไม่ลบไฟล์ออกจาก tmp?

ไฟล์ จะสะสมและใช้พื้นที่ดิสก์ iOS อาจล้าง tmp เมื่อรีสตาร์ตอุปกรณ์ แต่จนกระทั่งนั้นแอพจะสิ้นเปลาพื้นที่ดิสก์โดยไม่จำเป็น เมื่อมีการสะสมอย่างมาก ผู้ใช้อาจเห็นในการตั้งค่าหน่วยความจำว่าแอพใช้พื้นที่มาก

tmp เหมาะสำหรับการเข้ารหัสข้อมูลชั่วคราวหรือไม่?

ได้ คุณสามารถใช้ DataProtectionType กับ NSFileProtectionComplete สำหรับไฟล์ชั่วคราวที่มีข้อมูลที่อ่อนไหว อย่างไรก็ตาม โปรดจำไว้ว่า: หากไฟล์จะถูกอ่านเฉพาะในเซสชันปัจจุบันแล้วถูกลบ การเข้ารหัสอาจเกินไป ประเมินความจำเป็นของการเข้ารหัสโดยพิจารณาจากประเภทข้อมูล

จะสร้างชื่อไฟล์ที่ไม่ซ้ำใน tmp โดยไม่ให้เกิดการชนกันได้อย่างไร?

ใช้ ProcessInfo.processInfo.globallyUniqueString เพื่อสร้างตัวระบุเอกลักษณ์ที่ไม่ซ้ำหรือ UUID().uuidString FileManager ยังมีเมธอด urlForCreatingTemporaryFile ที่สร้างชื่อที่ไม่ซ้ำใน tmp โดยอัตโนมัติ ซึ่งรับประกันว่าจะไม่มีการชนกันเมื่อเขียนพร้อมกัน

ขนาดของ tmp มีผลต่อการตรวจสอบ App Store หรือไม่?

โดยทางอ้อม — ใช่ Apple ใส่ใจกับปริมาณข้อมูลทั้งหมดที่แอพเก็บไว้บนดิสก์ หาก tmp มีไฟล์ที่ไม่ได้ลบจำนวนหลายกิโกไบต์ ผู้ตรวจสอบอาจปฏิเสธแอพ ขีดจำกัดที่แนะนำสำหรับ tmp คือไม่เกิน 100 MB ในทุกเวลา ทำความสะอาด tmp เป็นประจำ และตรวจสอบขนาดผ่าน FileManager

สรุป

  • Temporary Directory (tmp) — ไดเรกทอรีสำหรับข้อมูลที่มีอายุจำกัดเฉพาะในเซสชันแอพปัจจุบัน
  • เส้นทางไปยัง tmp สามารถ เปลี่ยนแปลง ระหว่างการเปิดใช้งาน — อย่าเก็บไว้ในพื้นที่เก็บข้อมูลถาวร
  • ระบบสามารถล้าง tmp เมื่อ รีสตาร์ต อุปกรณ์หรือถอนแอพ
  • ไฟล์ใน tmp ไม่รวมอยู่ ในการสำรอง iCloud และ iTunes
  • แตกต่างจาก Caches Directory, tmp ไม่ได้ออกแบบสำหรับการเก็บข้อมูล ระหว่างเซสชัน
  • นักพัฒนาต้อง ลบอย่างชัดเจน ไฟล์ชั่วคราวโดยใช้ FileManager.removeItem
  • ใช้ defer ใน Swift เพื่อรับประกันการลบไฟล์ชั่วคราวโดยไม่คำนึงผลลัพธ์ของการดำเนินการ

เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร

IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

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

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