2

我在使用 iPhone GPS 'runkeeper' 类型的应用程序时遇到了一点问题。该应用程序几乎在所有方面都可以正常工作,我设计它的方式是将 CLLocation 对象添加到数组中,然后将该对象数组存储在 MySQL 数据库中。然后,当我打开一个地图视图时,我只需从服务器中拉出数组,并通过一些操作,使用数据将图钉添加到地图中。

就像我说的那样,这一切都运行良好,坐在我的办公桌前时,在模拟器和设备上运行良好(顺便说一句,使用仪器 - 没有泄漏)。但是,当我在设备上测试了应用程序并实际离开房子并在街上走了 15 分钟时,应用程序在 CLLocationManager 对象停止更新并且数组已发布到 MySQL 时崩溃 - 几乎可以肯定(我认为)因为内存问题。

既然如此,鉴于我是一个相对的菜鸟,所以要温柔,我正在寻找有关开发一种更有效的方法将对象存储到数组中的建议,以便可能大量存储的位置数据不会' t 融化应用程序。

这是我正在使用的代码的(选择):

- (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
4

2 回答 2

0

只是一个疯狂的猜测。当您坐在办公桌前时,由于您的位置没有改变(取决于您如何设置位置管理器),更新会在片刻后停止。所以你不会在你的数组中得到这么多点。当你搬家时,你可能会得到很多。当您在办公桌前时,您可以检查您的阵列中有多少插入物以及移动时有多少......

于 2011-01-09T19:57:35.917 回答
0

您必须只存储主要更新。假设您将在第一公里存储每 5 米的差异(以防用户只是短途步行),而不是每 20-50 米的差异(如果他们去跑步)。如果您的数组/CoreData 开始显着增长,您还可以在后台线程上修剪一些接近的值或相同方向的值。

于 2015-07-03T12:40:04.040 回答