5

我正在编写一个 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 经验我不确定如何做到这一点)还是我需要在接下来的两个坐标之间创建一条新的折线(尽管我听说有地图上太多单独的折线会影响性能和内存使用...)?

提前致谢。

4

1 回答 1

5

首先,看看如何更新 MKPolyline / MKPolylineView?,尤其是Breadcrumb示例代码的链接。这可能是您需要的一个很好的起点。

但是,您会看到其CrumbPath对象的一个​​重要部分是对realloc. 所以是的,如果你想有效地存储点数组,你需要知道如何管理 C 风格的数组。是的,这并不容易。是的,C 风格的数组操作会导致内存泄漏。

Breadcrumb 示例用于realloc调整其数组的大小。通过将数组使用的内存分配给类型,您可以更安全一些NSMutableData。建议作为对在 Objective-C/iPhone 应用程序中使用“经典”malloc()/free() 可以吗?. 阅读其他解决方案以查看执行相同工作的常规 Cmalloc()和函数。free()注意 NSMutableData 有一个非常方便的increaseLengthBy:方法。

当您了解为什么每个 C 学生都尝试sizeof()不正确地使用它以及如何正确使用它时,您将了解 C 内存管理。

于 2012-04-07T12:59:45.477 回答