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:) трябва да бъде извикан незабавно след завършване на операцията с временния файл. Използвайте defer в Swift за гарантирано изтриване дори при възникване на грешка.

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 MB във всеки един момент. Редовно почиствайте tmp и проверявайте размера му чрез FileManager.

Резюме

  • Temporary Directory (tmp) — директория за данни, чийто живот е ограничен до текущата сесия на приложението.
  • Пътят до tmp може да се промени между стартирания — не го запазвайте в постоянно хранилище.
  • Системата може да изчисти tmp при рестартиране на устройството или разтоварване на приложението.
  • Файловете от tmp не се включват в резервните копия на iCloud и iTunes.
  • За разлика от Caches Directory, tmp не е предназначена за съхранение между сесии.
  • Разработчикът трябва изрично да изтрива временните файлове с FileManager.removeItem.
  • Използвайте defer в Swift за гарантирано изтриване на временните файлове при всеки резултат от операцията.

Ще разработим мобилно приложение под ключ

IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също