iPhone MapView / MapKit स्मृति रिसाव में removeAnnotation और addAnnotation परिणामों का उपयोग?

वोट
1

MapView पर एक जीपीएस सूचक के स्थान को अपडेट करने के ...

[mapView removeAnnotation:myGpsAnnotation];
[myGpsAnnotation release];
myGpsAnnotation = nil;
myGpsAnnotation = [[MapLocationAnnotation alloc] initWithCoordinate:region.center annotationType:MapAnnotationTypeGps title:MAP_ANNOTATION_TYPE_GPS];
[mapView addAnnotation:myGpsAnnotation];

... मैं शुद्ध स्मृति धीरे-धीरे उपकरण (सिम्युलेटर) में चढ़ाई देखते हैं। नहीं लीक ब्लिप, लेकिन नेट बाइट्स और # नेट धीरे-धीरे बढ़ाने ... जब तक कि इस कोड को बाहर टिप्पणी की है। तो मैं 100% कुछ इस अपमानजनक कोड नहीं है हूँ।

लेकिन अगर मैं तो निम्न कार्य करें ...

[mapView removeAnnotation:myGpsAnnotation];
[myGpsAnnotation release];
myGpsAnnotation = nil;
myGpsAnnotation = [[MapLocationAnnotation alloc] initWithCoordinate:region.center annotationType:MapAnnotationTypeGps title:MAP_ANNOTATION_TYPE_GPS];
[mapView addAnnotation:myGpsAnnotation];
[mapView removeAnnotation:myGpsAnnotation];
[mapView addAnnotation:myGpsAnnotation];
[mapView removeAnnotation:myGpsAnnotation];
[mapView addAnnotation:myGpsAnnotation];

... तो नेट बाइट्स और # नेट बहुत तेजी से वृद्धि हुई है। क्या यह संभव है यह मेरी गलती नहीं है, और मैं MapKit में रिसाव को ट्रैक करने की कोशिश कर रहा हूँ? मैं वास्तव में स्मृति लीक कर रहा हूँ? फिर, कुछ भी नहीं लीक के अंतर्गत प्रकट होता है, लेकिन फिर मैं नहीं दिख रहा है यही कारण है कि नेट मूल्यों लगातार चढ़ाई की जाएगी।

किसी भी मदद के लिए धन्यवाद, -Gord

04/02/2010 को 23:34
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


3 जवाब

वोट
2

आपका रिलीज चक्र गलत है:

myGpsAnnotation = [[MapLocationAnnotation alloc] initWithCoordinate:region.center annotationType:MapAnnotationTypeGps title:MAP_ANNOTATION_TYPE_GPS]; 
//retain count = 1

[mapView addAnnotation:myGpsAnnotation]; 
//retain count = 2 (the map does an extra retain)

[myGpsAnnotation release]; 
//retain count = 1
myGpsAnnotation = nil; //not really necessary

[mapView removeAnnotation:myGpsAnnotation]; 
//retain count = 0 -> dump (you can do this on the original place; I put it here to show the cycle)

पुनश्च। स्मृति में वृद्धि आप देख annotationVIEWS से शायद है। ये नक्शा द्वारा कैश कर रहे हैं। आप अभी भी मेम में वृद्धि दिखाई दे, तो शायद आपके विचार dequeueing गलत है।

पी पी एस। तुम सिर्फ टिप्पणी के लिए नए स्थान निर्धारित करने पर विचार किया था। बहुत आसान है, तो स्थान केवल एक चीज है कि बदलता है।

myGpsAnnotation.coordinate = region.center;
10/03/2011 को 11:55
का स्रोत उपयोगकर्ता

वोट
1

आप पहले समझना चाहिए कि कैसे संग्रह काम करता है।

जोड़ना और संग्रह करने के लिए वस्तु यह बनी रहेगी।
संग्रह से एक वस्तु को निकालने से यह जारी करेंगे।

आपके मामले में यह एक मानचित्र दृश्य है:


  1. दृश्य मैप करने के लिए एनोटेशन जोड़ने के बाद, आप इसे जारी करना चाहिए अगर आप संदर्भ के मालिक हैं।
  2. मैप दृश्य से एक एनोटेशन को हटाने के बाद OT इसे जारी जरूरत नहीं है।

 MyClass *obj=[[MClass alloc] init];
 [mapview addObject:obj];
 [obj release];
 ...
 [mapview removeAnnotation:obj];

बस। यहां जारी करने के लिए कोई ज़रूरत नहीं।

04/03/2011 को 08:38
का स्रोत उपयोगकर्ता

वोट
0

आप सिम्युलेटर पर इस परीक्षण के दौरान देख रहे हैं, तो चिंता न करें। ऐसा लगता है कि नक्शा किट स्मृति में मानचित्र टाइल कैश जब सिम्युलेटर पर चल रहा है, जबकि डिवाइस पर, यह मानचित्र टाइल के भंडारण के लिए SQLite का उपयोग करता है और नहीं डिवाइस पर सीमित रैम।

13/02/2010 को 18:29
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more