मैं एक iPhone खेल खेलने का मैदान के रूप में एक MKMapView का उपयोग करता है पर काम कर रहा हूँ। खेलने के मिनट का केवल एक जोड़े के बाद एप्लिकेशन अनिवार्य रूप से सुस्त पाने के लिए शुरू होता है और अंत में कम मेमोरी के कारण दुर्घटनाओं। अपराधी के आसपास खुदाई करने के बाद कि मानचित्र दृश्य लगातार अधिक स्मृति की मांग हो रहा है। खेल जूमिंग और नक्शे के पैनिंग तो मैं केवल कि टाइल्स के मानचित्र का कैश बस जब तक यह स्मृति से बाहर चलाता बढ़ रही रखता है यह मान सकते हैं की एक बहुत कुछ की आवश्यकता है। इसमें टाइल्स की कैश है या होते हैं यह स्मृति की खपत है फ्लश करने के लिए मानचित्र दृश्य के लिए मजबूर करने कोई तरीका है?
टाइल्स की स्पष्ट MKMapView का कैश?
* नोट: यह उत्तर केवल iOS 4.1 और कम करने के लिए प्रासंगिक है। समस्याओं इस जवाब में वर्णित ज्यादातर आईओएस 4.2 में ठीक किया गया *
के रूप में अपने एप्लिकेशन दोनों नक्शे का उपयोग करता है और यह भी अन्य सुविधाओं है कि उच्च रैम की मांग है कि मैं इस पर कुछ खुदाई कर रहा हूँ।
मैं एक जवाब है, लेकिन कोई समाधान नहीं मिली है। MKMapView की स्मृति की मांग तेजी से बढ़ा के रूप में आप एक क्षेत्र में करीब ज़ूम, और इस क्षेत्र में ज़ूम इन किया है कि भीतर आसपास पैन।
वहाँ MKMapView टाइल कैश के दो स्तर हैं। एक एक Malloc ~ उपकरण में 196kb रूप में प्रकट होता है, अन्य NSData भिन्न आकारों की (स्टोर) है।
Malloc सक्रिय में उपयोग टाइल्स प्रतीत होता है, और वहाँ कितने आवंटित किया जा सकता है पर एक कठिन टोपी है। मेरे एप्लिकेशन में उस नंबर 16 यकीन है कि अगर UIView आकार या नहीं पर इसके आधारित है, नहीं। ये आवंटन इसरो में कामयाब हो रहे हैं, और यह स्मृति चेतावनी प्रतिक्रिया करता है।
वैसे भी, एक निश्चित ज़ूम स्तर पर, कहते हैं, महाद्वीप स्तर, (पर्याप्त उत्तरी अमेरिका के सबसे एक iPad स्क्रीन में फिट करने के लिए), टाइल्स का आकार दिया है, तो वास्तव में कभी नहीं कैशिंग की कि दूसरे स्तर को पाने के लिए है (NSData (स्टोर) ) मानचित्र को पूरा करने के। सब कुछ कुरकुरा और साफ है। अगर मैं सक्रिय स्मृति में बाहरी छवियों का एक टन में लोड, टाइल्स खुद को छांटना। बहुत बढ़िया!
समस्या आ जाती है कैशिंग की कि दूसरे स्तर हिट। यह तब होता है जब आप 16 टाइल्स की बजाय में ज़ूम, और अचानक पूरे planat दिखाने के लिए, यह 16 टाइल्स सिर्फ लॉस Angelas दिखावा करने की जरूरत है, और यह NSData (दुकान में उन्हें डालता है के रूप में आप सिर्फ उन पुराने टाइल डंपिंग के बजाय आसपास पैन ) आवंटन जहां वे लगते मुक्त कर दिया हो कभी नहीं करने के लिए।
यह NSData (स्टोर) NSURLConnectionCache जो केवल स्मृति में डिफ़ॉल्ट रूप से मौजूद है। आप इसे सीमित करने के लिए इस कैश उपयोग नहीं कर सकते, क्योंकि यह डिफ़ॉल्ट साझा कैश (पहले से ही इसे करने की कोशिश) नहीं है।
तो यह है जहाँ मैं अटक जाते है।
नाकाफी जवाब यह है कि यदि आप नक्शे ज़ूमिंग को निष्क्रिय और एक यथोचित व्यापक ज़ूम स्तर पर इसे ठीक है, तो आप पूरी तरह से इस समस्या से बचने कर सकते हैं, लेकिन स्पष्ट रूप से कुछ भी ऐप्स यह जरूरत है ... और कहा कि जहाँ तक मुझे मिल गया है।
मैं एप्पल के साथ एक समर्थन टिकट दायर क्या वह मानचित्र (जो वैसे मैं लापरवाही से रैम 50 + megs सक्रिय स्मृति में आवंटित करने के लिए क्रैंक करने में सक्षम था) के लिए यह हास्यास्पद कैश सीमित करने के लिए किसी भी तरह से प्रकट कर सकते हैं।
उम्मीद है की यह मदद करेगा।
संपादित करें
अगले आईओएस रिलीज इस असीम कैश समस्या हल हो जाती है प्रकट होता है। MKMapView अब आक्रामक तरीके से अपने कैश्ड टाइल डेटा prunes। आनन्द!
अगर आप अपनी टिप्पणी विचारों पर पुन: उपयोग पहचानकर्ता की स्थापना कर रहे हैं? (इसका मतलब यह है प्रणाली उन दृश्यों को अलग कर सकती है और केवल एक ही बार में स्मृति में विचारों की एक छोटी संख्या रहते हैं। यह भी, स्क्रॉल प्रदर्शन बढ़ जाती है क्योंकि स्क्रॉल अलग विचारों का पुन: उपयोग होगा।)
एक टिप्पणी के दृश्य पुनः उपयोग किया जा करने के लिए इस विधि का उपयोग करें:
- (MKAnnotationView *)dequeueReusableAnnotationViewWithIdentifier:(NSString *)identifier
तुम सिर्फ MapKit और 768x1024 (ipad आकार) के एक दृश्य के आकार से कोई ऐप बनाते हैं, तो एप्लिकेशन को आसानी से "लाइव बाइट" की 30 से अधिक एमबी उपभोग कर सकते हैं के रूप में उपकरण आवंटन कार्यक्रम के द्वारा की सूचना दी। यह आईपैड आईओएस v3.2.2 (4.2 रिलीज चाहिए अगले सप्ताह तक नवीनतम संस्करण) पर चल रहा है देखा गया था। अपना शोध से यह लगता है एक ही ऐप्लिकेशन, जहां ज्यादातर डेवलपर्स एक स्तर 1 स्मृति के आसपास 15-25 एमबी चेतावनी प्राप्त रिपोर्ट और उस स्तर के बाद जल्द ही दुर्घटनाओं के लिए एक बहुत है कि स्मृति की इस राशि।













