Caches Directory — iOS tətbiqinin sandbox-unda müvəqqəti məlumatların saxlanması üçün nəzərdə tutulmuş kataloqdur. Apple File System Basics (2024) məlumatına görə, sistem diskdə yer boşaltmaq üçün istənilən vaxt Caches Directory-dən faylları silə bilər — tətbiq bu faylların olmamasını düzgün idarə etməli və lazım olduqda onları bərpa etməlidir. Documents Directory-dən fərqli olaraq, Caches-dən olan məlumatlar iCloud və iTunes ehtiyat nüsxəsinə daxil edilmir, bu da istifadəçinin bulud yaddaşına yükü azaldır.
Əsas məqamlar
Caches Directory — iOS tətbiqinin sandbox-u daxilində, lazım olduqda bərpa edilə bilən məlumatların saxlanması üçün optimallaşdırılmış kataloq. Documents Directory-dən fərqli olaraq, Caches istifadəçi məlumatları üçün nəzərdə tutulmayıb — bu tətbiqin işini sürətləndirmək üçün müvəqqəti yaddaşdır.
iOS Caches Directory-dən keşlənmiş şəbəkə cavablarının, əvvəlcədən yüklənmiş şəkillərin, seriyalaşdırılmış obyektlərin və tətbiqin bərpa edə biləcəyi məlumatların yerləşdirilməsi üçün istifadə edir. Tərtibatçı bu kataloqda məlumatların uzunmüddətli saxlanmasına etibar etməməlidir.
Apple WWDC 2020 məlumatına görə, iOS tətbiqlərinin təxminən 40%-i keşlənmiş şəkillərin və şəbəkə məlumatlarının saxlanması üçün Caches Directory-dən istifadə edir, 25% tərtibatçı isə bu kataloqlar arasındakı fərqləri anlamadığı üçün Caches-də Documents və ya Application Support-da yerləşməli olan məlumatları səhv yerləşdirir.
Caches-in kritik xüsusiyyəti: tətbiq sistemi tərəfindən keş faylının silindiyi vəziyyəti düzgün idarə etməlidir. Keş silindikdən sonra tətbiqin funksionallığı pozulursa — bu, məlumatların səhv kataloqda saxlandığını göstərir.
Swift-də Caches Directory-yə yol .cachesDirectory göstərilməklə FileManager-ın standart metodu ilə əldə edilir. Bu, şəbəkə məlumatları ilə işləyən demək olar hər iOS tətbiqində istifadə olunan sadə bir əməliyyatdır.
import Foundation
let fileManager = FileManager.default
guard let cachesURL = fileManager.urls(
for: .cachesDirectory,
in: .userDomainMask
).first else { return }
// Keşlənmiş JSON-u saxla
let cacheFile = cachesURL.appendingPathComponent("feed_cache.json")
let jsonData = try JSONSerialization.data(
withJSONObject: response,
options: [.prettyPrinted]
)
try jsonData.write(to: cacheFile)
Objective-C NSSearchPathForDirectoriesInDomains ilə NSCachesDirectory istifadə edir. Apple Swift API-ni tövsiyə etsə də, Caches Directory ilə Objective-C kodu işlək və dəstəklənən olaraq qalır.
@import Foundation;
NSArray *paths = NSSearchPathForDirectoriesInDomains(
NSCachesDirectory,
NSUserDomainMask,
YES
);
NSString *cachesPath = paths.firstObject;
NSString *cacheFile = [cachesPath stringByAppendingPathComponent:@"feed_cache.plist"];
Swift layihələri URL-based API-ə üstünlük verməlidir: bu tip təhlükəsizdir və SwiftUI və Combine kimi müasir freymvorklarla daha yaxşı inteqrasiya olunur.
Caches Directory tətbiqin işini sürətləndirmək üçün istifadə etdiyi bir neçə kateqoriya məlumat üçün optimaldır, lakin yeganə həqiqət mənbəyi deyil. Keşləmə üçün düzgün məlumat seçimi birbaşa UX və tətbiq performansına təsir edir.
JSON cavabları API-dən, xəbər lentləri məlumatları, obyekt siyahıları — tətbiqin serverdən yenidən yükləyə biləcəyi hər şey. HTTP cavablarının avtomatik keşlənməsi üçün URLCache istifadə edin və ya seriyalaşdırılmış obyektləri əl ilə saxlayın.
Şəkillər şəbəkədən yüklənmiş — Caches Directory-nin ən çox istifadə halı. SDWebImage və Kingfisher kimi kitabxanalar standart olaraq keşlənmiş şəkilləri məhz Caches-də saxlayır.
| Məlumat növü | Caches üçün uyğundur | Saxlanma müddəti |
|---|---|---|
| JSON API cavabları | Bəli | Sistem təmizliyinə qədər |
| Şəkillər şəbəkədən | Bəli | Sistem təmizliyinə qədər |
| Debug jurnalları | Şərti | Daha yaxşı tmp-də |
| Oyun yaddaşları | Xeyr | Yalnız Documents |
| Konfiqurasiyalar tətbiq | Xeyr | Application Support |
Məlumatlar bərpa edilə bilmirsə — onların yeri Caches deyil. Bu ən sadə meyardır: təsəvvür edin ki, sabah sistem Caches-dən bütün faylları siləcək. Tətbiq düzgün işləməyə davam edərsə — məlumatlar düzgün saxlanılır.
iOS Caches Directory-nin təmizlənməsini avtomatik idarə edir, lakin dəqiq triggerlər və alqoritmlər Apple tərəfindən sənədləşdirilməyib. Məlumdur ki, sistem diskdə yer çatışmazlığı zamanı, həmçinin Offload Unused Apps funksiyası işləyərkən Caches-dən faylları silə bilər.
Təmizləmə prosesi tətbiq üçün şəffafdır: sistem xəbərdarlıq etmədən faylları silir. Tətbiq oxumadan əvvəl faylın mövcudluğunu yoxlamalı və olmadıqda onu yenidən yaratmalıdır. Uzunmüddətli saxlamaya etibar etməmək Caches ilə işdə əsas tələbdir.
Apple-ın "File System Basics" (2024) məqaləsinə görə, tətbiq Caches Directory-dəki faylların seanslar arasında əlçatan olacağına güvənməməlidir. Tərtibatçılara fallback mexanizmi tətbiq etmək tövsiyə olunur: keşlənmiş fayl olmadıqda — məlumatları şəbəkədən yükləyin və yenidən Caches-də saxlayın.
Ayrıca ssenari — tətbiqin boşaldılması (Offload). Bu funksiya aktivləşdirildikdə iOS tətbiqi silir, lakin onun Documents Directory-ni saxlayır. Caches Directory isə silinir. Tətbiqi bərpa edən istifadəçi keşlənmiş məlumatları əldə etməyəcək — tətbiq onları yenidən yükləməlidir.
Caches və Temporary (tmp) kataloqları arasındakı fərq çox vaxt tərtibatçılar arasında qarışıqlığa səbəb olur. Hər iki kataloq müvəqqəti məlumatları saxlayır, lakin fərqli ömür müddəti zəmanətləri və təyinatla.
| Xüsusiyyət | Caches Directory | Temporary Directory |
|---|---|---|
| Ömür müddəti | Seansdan seansa (zəmanət verilmir) | Yalnız seans çərçivəsində |
| Sistem təmizləməsi | Yer çatışmazlığında | Seans bitdikdə və ya yenidən başlatmada |
| Təyinat | İşi sürətləndirmək üçün keş | Çox müvəqqəti məlumatlar |
| Nümunə | Keşlənmiş şəkillər | İxracdan əvvəl müvəqqəti fayl |
| Ehtiyat nüsxə | Xeyr | Xeyr |
Caches seçin, əgər məlumatları tətbiq işə salındıqdan sonra saxlamaq faydalıdırsa, lakin onları bərpa etmək olar. tmp istifadə edin, əgər məlumatlar yalnız cari seans daxilində lazımdırsa və tətbiq başa çatdıqdan sonra dəyəri yoxdur.
Caches Directory ilə iş məlumat itkisi, tətbiqin gözlənilməz davranışı və performans problemlərindən qaçmağa kömək edən bir neçə qaydaya riayət etməyi tələb edir.
FileManager.fileExists(atPath:) Caches-dən hər oxumaqdan əvvəl çağırılmalıdır. Fayl yoxdursa — məlumatları orijinal mənbədən yükləyin və keşdə saxlayın. Heç vaxt Caches-dən faylın mövcud olduğunu güman etməyin.
Təyin edin tətbiqdə Caches Directory-nin maksimum ölçüsünü. Məsələn, şəkillər üçün 50 MB və JSON cavabları üçün 10 MB limit. Limit aşıldıqda dəyişmə tarixinə görə ən köhnə faylları silin.
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 }
// Köhnə faylları siyahıya al və sil
// ölçü limiti aşıldıqda
}
Bu təcrübələrə riayət etmək tətbiqin sistemin keş təmizləmə hərəkətləri zamanı düzgün işləməsinə və istifadəçinin gözlənilməz məlumat itkisi ilə qarşılaşmamasına zəmanət verir.
Tez-tez verilən suallar
Xeyr, iOS Caches-dən faylları silməzdən əvvəl bildiriş göndərmir. Təmizləmə prosesi tətbiq üçün tamamilə şəffafdır. Silinmə haqqında öyrənməyin yeganə yolu faylı oxumağa cəhd etdikdə FileManager nil qaytarır və ya xəta atır və tətbiq bu vəziyyəti idarə etməlidir.
Caches Directory-yə Files və ya iTunes vasitəsilə birbaşa giriş istifadəçidə yoxdur. Bununla belə, istifadəçi Parametrlər > Ümumi > Yaddaş bölməsindən konkret tətbiqi seçib "Yükü qaldır" düyməsini sıxmaqla bütün tətbiqlərin keşini təmizləyə bilər. iOS həmçinin yer çatışmazlığı zamanı keşi avtomatik təmizləyə bilər.
URLCache — Foundation-dan HTTP sorğularının keşlənməsi üçün daxili mexanizmdir. O, avtomatik olaraq keşlənmiş cavabları saxlayır və yükləyir, altlıqda Caches Directory istifadə edir. Əl ilə saxlama daha çox nəzarət verir: format seçmək, məlumatları şifrələmək və hər faylın ömür müddətini fərdi idarə etmək olar.
App Store vasitəsilə tətbiq yenilənməsi zamanı Caches Directory saxlanılır. Lakin yeni yeniləmə quraşdırma üçün daha çox yer tələb edərsə, məzmun sistem tərəfindən silinə bilər. Tərtibatçı yeniləmədən sonra Caches-in qorunmasına etibar etməməlidir — bu fallback mexanizminin tətbiqi üçün əlavə səbəbdir.
Konkret NSURLSession sessiyası üçün URLCache null təyin edin və ya .reloadIgnoringLocalCacheData keşləmə siyasətindən istifadə edin. Həmçinin boş keşlə URLSessionConfiguration konfiqurasiyası yarada bilərsiniz: sessionConfiguration.urlCache = null. Bu, həmişə aktual olmalı məlumatlar üçün faydalıdır.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun