扩展MKPolylines还是创建多个MKPolylines?

时间:2012-04-07 12:14:28

标签: ios mkmapview cllocationmanager

我正在编写一个iOS 5应用程序,可以实时跟踪用户的位置,在MKMapView上绘制他们的课程。无论何时进行GPS读取,我都希望在当前位置和旧位置之间绘制折线,最终形成用户所走过的轨道(或面包屑)。

我很乐意使用MKPolylineMKPolylineView来绘制轨道,假设我预先拥有所有CLLocationCoordinate2D坐标,使用类似下面的代码:

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

但是,由于我只是实时获取CLLocationCoordinate2D坐标(因为调用了locationManager:didUpdateToLocation:fromLocation:委托方法),我不确定绘制新折线的最佳方法。

我可以扩展现有的行(即添加到基于C的coordinates数组 - 没有太多的C经验我不确定如何做到这一点)或者我是否需要在接下来的两行之间创建新的折线坐标(虽然我听说地图上有太多单独的折线会影响性能和内存使用......)?

提前致谢。

1 个答案:

答案 0 :(得分: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内存管理。