2015-10-13 8 views
9

प्रलेखन के अनुसार, एनएसबींडलरसोर्सरूक्वेस्ट के माध्यम से डाउनलोड किए गए आईओएस 9 ऑन-डिमांड संसाधन केवल endAccessingResources कहलाते हैं, और इसे स्वचालित रूप से कहा जाता है जब संसाधन अनुरोध ऑब्जेक्ट को हटा दिया जाता है।आईओएस 9 ऑन-डिमांड संसाधनों को स्थायी रूप से रखा जा सकता है?

ठीक है, लेकिन जब ऐप समाप्त हो जाता है, सब कुछ हटा दिया जाता है। तो क्या इसका मतलब यह है कि NSBundleResourceRequest का उपयोग करके डाउनलोड किए गए संसाधन ऐप को समाप्त नहीं करते हैं? मैं ऐप स्टोर से डाउनलोड के लिए अपने ऐप को छोटे बनाने की एक सरल रणनीति का उपयोग करने की उम्मीद कर रहा था, जिसमें बहुत से संसाधन शामिल नहीं थे, और फिर उन्हें बाद में डाउनलोड किया गया; लेकिन अगर मैं उन संसाधनों को रखने में सक्षम नहीं हूं तो यह काम नहीं करेगा। क्या मुझे कहीं और संसाधनों की प्रतिलिपि बनाने की उम्मीद है और NSBundleResourceRequest को छोड़ दें?

उत्तर

4

मैं अपने आखिरी वाक्य में प्रश्नों का सुझाव देता हूं: जब संसाधन आते हैं, तो मैं उन्हें एप्लिकेशन समर्थन फ़ोल्डर में कॉपी करता हूं और NSBundleResourceRequest को छोड़ देता हूं।

यह ऑन-डिमांड संसाधनों की भावना के खिलाफ कुछ हद तक लगता है, लेकिन मेरी राय में आत्मा गलत भावना है; यह सुविधा एक बहुत ही व्यावहारिक तरीके से डिजाइन नहीं की गई है।

+0

@leafcutter सुनिश्चित नहीं है कि "बल" से आपका क्या मतलब है; मैंने कहा कि मैं NSBundleResourceRequest को छोड़ देता हूं, और यही वह है जो आप करने में सक्षम हैं। – matt

+0

@leafcutter आप बस इसे बना रहे हैं। दस्तावेज़ कहते हैं: "ऐप ऑपरेटिंग सिस्टम को सूचित करता है कि उसने अनुरोधित टैग का उपयोग करके समाप्त कर दिया है ... ऑपरेटिंग सिस्टम स्थानीय स्टोरेज से एसेट पैक से जुड़े कैश किए गए संसाधनों को शुद्ध करता है।" वैसे भी, आप किस बारे में बात कर रहे हैं उसके विपरीत मैं जो बात कर रहा हूं उसके विपरीत है। आपका प्रश्न संसाधनों को जारी करने के लिए मजबूर होना प्रतीत होता है। मेरा सवाल संसाधन _not_ को जारी करने के लिए मजबूर करने के बारे में है। आपकी सुविधा अंतर्निहित है; मेरा गुम है – matt

+0

लेकिन चूंकि स्मृति दबाव होने पर अस्थिर प्रतिलिपि शुद्ध हो जाएगी, तो आपको क्या परवाह है? एनएससीएच के साथ यह वही है; सिस्टम कम से कम चलने से स्मृति को रोकने के लिए स्मृति को जारी करने का वादा करता है। एक वचन तो वचन है। आप कुछ भी नहीं के बारे में चिंता कर रहे हैं। – matt

4

जब आप endAccessingResources, संपत्ति शुद्ध करने के लिए योग्य हो जाती है (मान लीजिए कि इसमें कोई अन्य अनुरोध नहीं है)। हालांकि, the documentation for ODR पढ़ने, यह जरूरी का पालन नहीं है कि संपत्ति तुरंत डिवाइस से निकाल दिया जाएगा:

एक परिसंपत्ति पैक के शुद्धिकरण के लिए पात्र है जब संबद्ध टैग के सभी नहीं रह गया है किसी भी अनुरोध के द्वारा बनाए रखा है। एक टैग से जुड़े संसाधन डिवाइस पर शुद्ध होने से पहले कुछ समय तक डिवाइस पर रह सकते हैं, जिसमें ऐप लॉन्च भी शामिल है।

तो संसाधन आपके ऐप को समाप्त कर सकता है और अगली बार जब आपका ऐप खुलता है, इस पर निर्भर करता है कि ओएस को लगता है कि उसे अंतरिक्ष को खाली करने की आवश्यकता है या नहीं। यदि आप संसाधनों तक पहुंचने के लिए conditionallyBeginAccessingResourcesWithCompletionHandler का उपयोग करते हैं, तो आपको एक बूलियन मिलेगा जो आपको बताएगा कि संसाधन अभी भी डिवाइस पर है या नहीं। यदि ऐसा है, तो आप इसे तुरंत उपयोग करना शुरू कर सकते हैं; और यदि यह नहीं है, तो आप beginAccessingResourcesWithCompletionHandler के साथ एक डाउनलोड शुरू कर सकते हैं।

यदि आप गारंटी देना चाहते हैं कि संसाधन हमेशा रहेगा, तो आप इसे प्रारंभिक डाउनलोड में शामिल कर सकते हैं; या, यदि आप निश्चित रूप से ओडीआर का उपयोग करना चाहते हैं, तो आपको इसे जारी रखने के लिए कहीं और डाउनलोड किए गए संसाधन की प्रतिलिपि बनाना होगा।

हालांकि, संसाधन की एक प्रति बनाने का मतलब यह हो सकता है कि आप डिवाइस पर 2 प्रतियों के साथ समाप्त हो जाते हैं - जिसे आपने कॉपी और जारी रखा है, और एक जिसे ओएस अभी तक हटा नहीं गया है। सभी ओडीआर संसाधनों की प्रतिलिपि बनाने के बाद, यह हो सकता है कि ऐप दो गुना अधिक जगह ले ले, जैसा कि आपने शुरुआती डाउनलोड में सबकुछ कॉपी किया है, कम से कम जब तक ओएस निर्णय लेता है कि उसे संपत्तियों को शुद्ध करना चाहिए।

tvOS पर इस्तेमाल किया ODRs बीत रहा है, ऐसा लगता है ओएस कैश में संपत्ति रखने के लिए, ताकि, एप्लिकेशन के अगले उपयोग पर की कोशिश करता है, redownloaded किए जाने की जरूरत के बिना वहाँ अभी भी है संभव के रूप में ज्यादा डेटा के रूप में (वहाँ हो सकता है पृष्ठभूमि में जटिल एल्गोरिदम बनें जो उपयोगकर्ता के निकट भविष्य में एक ऐप का उपयोग करके संभावना की निर्धारित करता है)। यदि हम ऐप कहीं और संपत्ति नहीं बनाते हैं, तो हम "कैश में जितना अधिक डेटा रखेंगे" का यह दृष्टिकोण बहुत अच्छा है, लेकिन यदि ऐप संपत्तियों की प्रतिलिपि बनाने जा रहा है और गारंटी देता है तो वह थोड़ा अनावश्यक लगता है।

आखिरकार, स्मृति समस्या होने पर कैश स्वचालित रूप से शुद्ध हो जाएगा, इसलिए यह केवल एक कॉस्मेटिक मुद्दा है जहां उपयोगकर्ता संभावित रूप से आपके ऐप को अपेक्षा से बड़े होने के रूप में देख पाएंगे, और फिर रेखा के नीचे कुछ बिंदु पर, जादुई रूप से छोटा होगा।

संबंधित मुद्दे