2012-04-07 24 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