2012-04-07 9 views
5

मैं एक आईओएस 5 ऐप लिख रहा हूं जो वास्तविक समय में उपयोगकर्ता के स्थान को ट्रैक करता है, MKMapView पर अपना कोर्स प्लॉट करता है। जब भी एक जीपीएस पढ़ने के लिए लिया जाता है, तो मैं वर्तमान और पुराने स्थानों के बीच एक पॉलीलाइन तैयार करना चाहता हूं, अंततः उपयोगकर्ता ने यात्रा के ट्रैक (या ब्रेडक्रंब) का निर्माण किया।एमकेपोलाइन्स का विस्तार या एकाधिक एमकेपोलाइन्स बनाते हैं?

मैं MKPolyline और MKPolylineView का उपयोग कर एक ट्रैक आकर्षित करने के लिए, यह मानते हुए मैं सभी CLLocationCoordinate2D अग्रिम में निर्देशांक है, नीचे के समान कोड का उपयोग कर के साथ सहज हूं,

MKPolyline *route = [MKPolyline polylineWithCoordinates:coordinates count:[self.coordinateArray count]];   
[mapView addOverlay:route]; 

लेकिन जब से मैं केवल CLLocationCoordinate2D हो रही है रीयल-टाइम में निर्देशांक (locationManager:didUpdateToLocation:fromLocation: प्रतिनिधि विधि कहा जाता है) मैं नई पॉलिलाइन को आकर्षित करने का सबसे अच्छा तरीका अनिश्चित हूं।

क्या मैं मौजूदा लाइनों का विस्तार कर सकता हूं (यानी सी-आधारित coordinates सरणी में जोड़ना - बहुत सी अनुभव नहीं है, मुझे यकीन है कि यह कैसे करना है) या मुझे अगले दो निर्देशांक (हालांकि) के बीच एक नई पॉलीलाइन बनाने की आवश्यकता है मैंने सुना है कि मानचित्र पर बहुत से व्यक्तिगत पॉलिलाइन होने से प्रदर्शन और स्मृति उपयोग प्रभावित हो सकता है ...)?

अग्रिम धन्यवाद।

+1

क्या आपने ऐप्पल नमूना ऐप [ब्रेडक्रंब] (http://developer.apple.com/library/ios/#samplecode/Breadcrumb/Introduction/Intro.html) देखा है? – Anna

उत्तर

5

सबसे पहले, how to update MKPolyline/MKPolylineView? देखें, खासकर Breadcrumb नमूना कोड के लिंक। आपको जो चाहिए वह एक अच्छा प्रारंभिक बिंदु हो सकता है।

हालांकि, आप देखेंगे कि CrumbPath ऑब्जेक्ट का एक महत्वपूर्ण हिस्सा realloc पर कॉल है। तो हां, आपको पता होना चाहिए कि सी-स्टाइल एरे का प्रबंधन कैसे करें यदि आप अपने अंक के कुशलतापूर्वक कुशलतापूर्वक स्टोर करना चाहते हैं। हाँ, यह आसान नहीं है। हां, सी-शैली सरणी हेरफेर स्मृति रिसाव के लिए एक निमंत्रण है।

ब्रेडक्रंब नमूना realloc का उपयोग अपनी सरणी का आकार बदलने के लिए करता है। NSMutableData प्रकार के साथ सरणी का उपयोग करने वाली स्मृति को आवंटित करके आप थोड़ा सुरक्षित हो सकते हैं। इसे Is it ok to use “classic” malloc()/free() in Objective-C/iPhone apps? के उत्तर के रूप में अनुशंसित किया जाता है। नियमित सी malloc() और free() समान कार्य करने वाले कार्यों को देखने के लिए अन्य समाधान पढ़ें। ध्यान दें कि एनएसएमयूटेबलडेटा का बहुत आसान increaseLengthBy: विधि है।

जब आप समझते हैं कि प्रत्येक सी छात्र sizeof() गलत तरीके से उपयोग करने का प्रयास क्यों करता है - और इसका सही तरीके से उपयोग कैसे करें - आप सी मेमोरी प्रबंधन को समझेंगे।

+0

आपके उत्तर के लिए धन्यवाद (और मुझे ब्रेडक्रंब नमूना कोड की ओर इशारा करते हुए!)। – Skoota

+1

ब्रेडक्रंब नमूना लिंक टूटा हुआ है। मुझे नया लिंक मिला है: http://developer.apple.com/library/ios/#samplecode/Breadcrumb/Introduction/Intro.html –