2012-04-07 59 views
5

我正在寫一個iOS 5應用程序,它實時跟蹤用戶的位置,在MKMapView上繪製他們的路線。無論何時進行GPS讀取,我都希望在當前位置和舊位置之間繪製折線,最終形成用戶旅行的軌跡(或麪包屑)。擴展MKPolylines或創建多個MKPolylines?

我願意使用MKPolylineMKPolylineView劃出一道軌跡,假設我都提前CLLocationCoordinate2D座標,使用類似的代碼如下:

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

然而,因爲我只得到CLLocationCoordinate2D座標實時(如調用locationManager:didUpdateToLocation:fromLocation:委託方法)我不確定繪製新多段線的最佳方式。

我可以擴展現有生產線(即增加了基於C-coordinates陣列 - 沒有多少Ç經驗我不確定如何做到這一點),或者我需要創建接下來的兩個座標之間的新的折線(雖然我聽說在地圖上有太多的單獨折線會影響性能和內存使用...)?

在此先感謝。

+1

你見過蘋果示例應用[Breadcrumb](http://developer.apple.com/library/ios/#samplecode/Breadcrumb/Introduction/Intro.html)嗎? – Anna 2012-04-07 12:53:43

回答

5

首先,請參閱how to update MKPolyline/MKPolylineView?,尤其是鏈接到Breadcrumb示例代碼。它可能是您需要的一個很好的起點。

但是,您會看到其CrumbPath對象的重要部分是致電realloc。所以是的,如果你想有效地存儲你的點數組,你需要知道如何管理C風格的數組。是的,這並不容易。是的,C風格的數組操作是對內存泄漏的邀請。

Breadcrumb示例使用realloc來調整其數組大小。通過將陣列使用的內存分配給NSMutableData類型,可以更安全一些。建議作爲Is it ok to use 「classic」 malloc()/free() in Objective-C/iPhone apps?的回答。閱讀其他解決方案以查看執行相同工作的常規C malloc()free()函數。請注意,NSMutableData有一個非常方便的increaseLengthBy:方法。

當你明白爲什麼每個C學生都錯誤地試圖使用sizeof()爲什麼 - 以及如何正確使用它 - 你將會理解C語言的內存管理。

+0

感謝您的回覆(並指向我的Breadcrumb示例代碼!)。 – Skoota 2012-04-08 04:07:09

+1

麪包屑示例鏈接已損壞。我找到了新的鏈接:http://developer.apple.com/library/ios/#samplecode/Breadcrumb/Introduction/Intro.html – 2013-04-28 16:16:56