Caches Directory iOS एप्लिकेशन के सैंडबॉक्स में एक निर्देशिका है जो अस्थायी डेटा संग्रहीत करने के लिए डिज़ाइन की गई है जिसे नेटवर्क से पुनर्स्थापित या पुनः लोड किया जा सकता है। Apple File System Basics (2024) के अनुसार, सिस्टम डिस्क स्थान खाली करने के लिए किसी भी समय Caches Directory से फ़ाइलों को हटा सकता है — एप्लिकेशन को इन फ़ाइलों की अनुपस्थिति को सही ढंग से संभालना चाहिए और आवश्यकता पड़ने पर उन्हें पुनर्स्थापित करना चाहिए। Documents Directory के विपरीत, Caches का डेटा iCloud और iTunes बैकअप में शामिल नहीं होता, जिससे उपयोगकर्ता के क्लाउड स्टोरेज पर भार कम होता है।
मुख्य बिंदु
Caches Directory iOS एप्लिकेशन सैंडबॉक्स के अंदर एक निर्देशिका है जो आवश्यकता पड़ने पर पुनर्स्थापित किए जा सकने वाले डेटा को संग्रहीत करने के लिए अनुकूलित है। Documents Directory के विपरीत, Caches उपयोगकर्ता डेटा के लिए नहीं है — यह एप्लिकेशन प्रदर्शन को गति देने के लिए अस्थायी भंडारण है।
iOS कैश की गई नेटवर्क प्रतिक्रियाओं, प्रीलोडेड छवियों, सीरियलाइज़्ड ऑब्जेक्ट्स और उन डेटा को संग्रहीत करने के लिए Caches Directory का उपयोग करता है जिन्हें एप्लिकेशन पुनर्स्थापित कर सकता है। डेवलपर्स को इस निर्देशिका में दीर्घकालिक डेटा भंडारण पर निर्भर नहीं रहना चाहिए।
Apple WWDC 2020 के अनुसार, लगभग 40% iOS एप्लिकेशन कैश की गई छवियों और नेटवर्क डेटा को संग्रहीत करने के लिए Caches Directory का उपयोग करते हैं, जबकि 25% डेवलपर्स इन निर्देशिकाओं के बीच अंतर को न समझने के कारण Caches में वह डेटा गलत तरीके से रखते हैं जो Documents या Application Support में होना चाहिए।
Caches का एक महत्वपूर्ण गुण: एप्लिकेशन को उन स्थितियों को सही ढंग से संभालना चाहिए जब सिस्टम द्वारा कैश फ़ाइल हटा दी गई हो। यदि कैश हटाने से एप्लिकेशन की कार्यक्षमता टूट जाती है, तो डेटा गलत निर्देशिका में संग्रहीत है।
Swift में, Caches Directory का पथ .cachesDirectory के साथ मानक FileManager विधि का उपयोग करके प्राप्त किया जाता है। यह एक सरल ऑपरेशन है जो नेटवर्क डेटा के साथ काम करने वाले लगभग हर iOS एप्लिकेशन में उपयोग होता है।
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, NSCachesDirectory के साथ NSSearchPathForDirectoriesInDomains का उपयोग करता है। हालाँकि Apple Swift API की सिफारिश करता है, Caches Directory के साथ Objective-C कोड कार्यशील और समर्थित बना हुआ है।
@import Foundation;
NSArray *paths = NSSearchPathForDirectoriesInDomains(
NSCachesDirectory,
NSUserDomainMask,
YES
);
NSString *cachesPath = paths.firstObject;
NSString *cacheFile = [cachesPath stringByAppendingPathComponent:@"feed_cache.plist"];
Swift प्रोजेक्ट्स को URL-आधारित API पसंद करना चाहिए: यह टाइप-सेफ है और SwiftUI और Combine जैसे आधुनिक फ्रेमवर्क के साथ बेहतर एकीकृत होता है।
Caches Directory डेटा की कई श्रेणियों के लिए उपयुक्त है जिनका उपयोग एप्लिकेशन प्रदर्शन को गति देने के लिए करता है, लेकिन यह सत्य का एकमात्र स्रोत नहीं है। कैशिंग के लिए सही डेटा चुनना सीधे UX और एप्लिकेशन प्रदर्शन को प्रभावित करता है।
API से JSON प्रतिक्रियाएँ, समाचार फ़ीड डेटा, ऑब्जेक्ट सूचियाँ — वह सब कुछ जो एप्लिकेशन सर्वर से पुनः डाउनलोड कर सकता है। HTTP प्रतिक्रियाओं की स्वचालित कैशिंग के लिए URLCache का उपयोग करें या सीरियलाइज़्ड ऑब्जेक्ट्स को मैन्युअल रूप से सहेजें।
नेटवर्क से डाउनलोड की गई चित्र Caches Directory का सबसे सामान्य उपयोग मामला है। SDWebImage और Kingfisher जैसी लाइब्रेरीज़ डिफ़ॉल्ट रूप से कैश की गई छवियों को Caches में सहेजती हैं।
| डेटा प्रकार | Caches के लिए उपयुक्त | अवधारण अवधि |
|---|---|---|
| JSON API प्रतिक्रियाएँ | हाँ | सिस्टम सफ़ाई तक |
| नेटवर्क से चित्र | हाँ | सिस्टम सफ़ाई तक |
| डीबग लॉग | शर्तसापेक्ष | tmp में बेहतर |
| गेम सेव | नहीं | केवल Documents |
| एप्लिकेशन कॉन्फ़िगरेशन | नहीं | Application Support |
यदि डेटा पुनर्स्थापित नहीं किया जा सकता, तो उसका स्थान Caches में नहीं है। यह सबसे सरल मापदंड है: कल्पना करें कि कल सिस्टम Caches से सभी फ़ाइलें हटा देगा। यदि एप्लिकेशन सही ढंग से काम करना जारी रखता है, तो डेटा सही ढंग से संग्रहीत है।
iOS स्वचालित रूप से Caches Directory की सफ़ाई का प्रबंधन करता है, लेकिन सटीक ट्रिगर और एल्गोरिदम Apple द्वारा दस्तावेज़ित नहीं हैं। यह ज्ञात है कि सिस्टम डिस्क स्थान की कमी होने पर, साथ ही Offload Unused Apps सुविधा सक्रिय होने पर Caches से फ़ाइलें हटा सकता है।
सफ़ाई प्रक्रिया एप्लिकेशन के लिए पारदर्शी है: सिस्टम बिना सूचना के फ़ाइलें हटाता है। एप्लिकेशन को पढ़ने से पहले फ़ाइल की उपस्थिति की जाँच करनी चाहिए और अनुपस्थित होने पर इसे फिर से बनाना चाहिए। दीर्घकालिक भंडारण पर निर्भर न रहना Caches के साथ काम करते समय एक मुख्य आवश्यकता है।
Apple के लेख “File System Basics” (2024) के अनुसार, एप्लिकेशन को यह उम्मीद नहीं करनी चाहिए कि Caches Directory में फ़ाइलें सत्रों के बीच उपलब्ध होंगी। डेवलपर्स को फ़ॉलबैक तंत्र लागू करने की सलाह दी जाती है: यदि कैश की गई फ़ाइल गायब है, तो नेटवर्क से डेटा डाउनलोड करें और इसे फिर से Caches में सहेजें।
एक अलग परिदृश्य है एप्लिकेशन ऑफ़लोड (Offload)। जब यह सुविधा सक्रिय होती है, iOS एप्लिकेशन को हटा देता है लेकिन उसके Documents Directory को रखता है। Caches Directory इस प्रक्रिया में हटा दी जाती है। जो उपयोगकर्ता एप्लिकेशन को पुनर्स्थापित करता है, उसे कैश किया गया डेटा नहीं मिलेगा — एप्लिकेशन को इसे फिर से डाउनलोड करना होगा।
Caches और Temporary (tmp) निर्देशिकाओं के बीच अंतर अक्सर डेवलपर्स के बीच भ्रम पैदा करता है। दोनों निर्देशिकाएँ अस्थायी डेटा संग्रहीत करती हैं, लेकिन विभिन्न जीवनकाल गारंटी और उद्देश्यों के साथ।
| विशेषता | Caches Directory | Temporary Directory |
|---|---|---|
| जीवनकाल | सत्र से सत्र (गारंटी नहीं) | केवल सत्र के भीतर |
| सिस्टम सफ़ाई | स्थान की कमी पर | सत्र समाप्ति या रीबूट पर |
| उद्देश्य | प्रदर्शन को गति देने के लिए कैश | अत्यधिक अस्थायी डेटा |
| उदाहरण | कैश की गई चित्र | निर्यात से पहले अस्थायी फ़ाइल |
| बैकअप | नहीं | नहीं |
Caches चुनें यदि एप्लिकेशन लॉन्च के बीच डेटा रखना लाभदायक है लेकिन इसे पुनर्स्थापित किया जा सकता है। tmp का उपयोग करें यदि डेटा केवल वर्तमान सत्र में आवश्यक है और एप्लिकेशन समाप्त होने के बाद इसका कोई मूल्य नहीं है।
Caches Directory के साथ काम करने के लिए कई नियमों का पालन करना आवश्यक है जो डेटा हानि, अप्रत्याशित एप्लिकेशन व्यवहार और प्रदर्शन समस्याओं से बचने में मदद करते हैं।
FileManager.fileExists(atPath:) को Caches से प्रत्येक पढ़ने से पहले कॉल किया जाना चाहिए। यदि फ़ाइल गायब है, तो मूल स्रोत से डेटा लोड करें और कैश में सहेजें। कभी यह न मानें कि Caches में कोई फ़ाइल मौजूद है।
अपने एप्लिकेशन में Caches Directory के लिए अधिकतम आकार निर्धारित करें। उदाहरण के लिए, चित्रों के लिए 50 MB और JSON प्रतिक्रियाओं के लिए 10 MB की सीमा। सीमा पार होने पर, संशोधन तिथि के अनुसार सबसे पुरानी फ़ाइलें हटाएँ।
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
}
इन प्रथाओं का पालन यह सुनिश्चित करता है कि एप्लिकेशन सिस्टम कैश सफ़ाई क्रियाओं की परवाह किए बिना सही ढंग से काम करता है, और उपयोगकर्ता अप्रत्याशित डेटा हानि का सामना नहीं करते हैं।
अक्सर पूछे जाने वाले प्रश्न
नहीं, iOS Caches से फ़ाइलें हटाने से पहले सूचनाएँ नहीं भेजता। सफ़ाई प्रक्रिया एप्लिकेशन के लिए पूरी तरह से पारदर्शी है। हटाने का पता लगाने का एकमात्र तरीका फ़ाइल पढ़ने का प्रयास करना है — FileManager nil लौटाता है या त्रुटि फेंकता है, और एप्लिकेशन को इस स्थिति को संभालना चाहिए।
उपयोगकर्ता के पास Files या iTunes के माध्यम से Caches Directory तक सीधी पहुँच नहीं है। हालाँकि, वे Settings > General > Storage के माध्यम से सभी एप्लिकेशन का कैश साफ़ कर सकते हैं, एक विशिष्ट एप्लिकेशन चुनकर और “Offload App” दबाकर। iOS स्थान की कमी होने पर स्वचालित रूप से कैश साफ़ कर सकता है।
URLCache Foundation से HTTP अनुरोध कैशिंग के लिए एक अंतर्निहित तंत्र है। यह स्वचालित रूप से कैश की गई प्रतिक्रियाओं को सहेजता और लोड करता है, आंतरिक रूप से Caches Directory का उपयोग करता है। मैन्युअल सहेजना अधिक नियंत्रण देता है: आप प्रारूप चुन सकते हैं, डेटा एन्क्रिप्ट कर सकते हैं और प्रत्येक फ़ाइल के जीवनकाल को व्यक्तिगत रूप से प्रबंधित कर सकते हैं।
App Store के माध्यम से एप्लिकेशन अपडेट करने पर, Caches Directory संरक्षित रहती है। हालाँकि, यदि नए अपडेट को स्थापना के लिए अधिक स्थान की आवश्यकता होती है तो सिस्टम सामग्री को हटा सकता है। डेवलपर को अपडेट के बाद Caches की स्थिरता पर निर्भर नहीं रहना चाहिए — यह फ़ॉलबैक तंत्र लागू करने का एक अतिरिक्त कारण है।
एक विशिष्ट NSURLSession सत्र के लिए URLCache को nil पर सेट करें या .reloadIgnoringLocalCacheData कैशिंग नीति का उपयोग करें। आप खाली कैश के साथ URLSessionConfiguration भी बना सकते हैं: sessionConfiguration.urlCache = nil। यह उन डेटा के लिए उपयोगी है जो हमेशा अद्यतित होने चाहिए।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें