我对iPhone GPS'runkeeper'型应用程序有点问题。在几乎所有方面,应用程序都可以正常工作,我设计它的方法是将CLLocation对象添加到数组中,然后将该对象数组存储在MySQL数据库中。然后,当我打开mapview时,我只需从服务器中拉出数组,然后通过一些操作,使用数据将引脚添加到地图中。
就像我说的,这一切都运行良好,并且在坐在我的桌子上时,在模拟器和设备上运行得非常好(顺便说一下,使用乐器 - 没有泄漏)。然而,当我在设备上测试应用程序并实际离开房子并沿着街道走了15分钟时,应用程序崩溃,CLLocationManager对象停止更新并且数组被发布到MySQL - 几乎可以肯定(我认为)因为记忆问题。
既然如此,鉴于我是一个相对的菜鸟,所以要温柔,我正在寻找关于开发一种更有效的方法将对象存储到数组中的建议,以便可能存储大量的存储位置dat不会融化应用程序。
这是我正在使用的代码(选择):
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation {
//注意我已经取出了确定CLocation对象是否有效的代码,以及一个或两个其他小东西
if (recording == YES) {//the start button has been pressed but the stop button hasn't.
if (alreadyBeenRound == NO) {
if (firstRecord == YES) {
//create the pointsonRoute array
if (pointsOnRouteExists == NO) {
pointsOnRoute = [[NSMutableArray alloc] init];
pointsOnRouteExists = YES;
}
[pointsOnRoute removeAllObjects];
firstRecord = NO; //after setting first record, can move on
}
[pointsOnRoute addObject:newLocation];
//more stuff taken out here
alreadyBeenRound = YES;
} else {
[pointsOnRoute addObject:newLocation];
}
//I do release the array
答案 0 :(得分:0)
只是一个疯狂的猜测。当您坐在办公桌前时,由于您的位置没有变化(取决于您设置位置管理器的方式),更新会在一段时间后停止。所以你的数组中没有得到这么多分。当你移动时,你可能会得到很多。你可以检查你何时在办公桌上你得到的阵列中有多少插入物以及移动时有多少插入物......
答案 1 :(得分:0)
您只需存储主要更新。假设您将在第一公里处每隔5米存储差异(如果用户只是短距离行走),如果他们去跑步,则每隔20-50米存储一次。如果您的数组/ CoreData开始显着增长,您还可以在后台线程上以相同方向修剪一些接近的值或值。