2011-01-09 2 views
2

iPhone GPS 'runkeeper'유형 앱에 약간의 문제가 있습니다. 거의 모든면에서 응용 프로그램이 잘 작동합니다. 내가 설계 한 방법은 CLLocation 객체를 배열에 추가 한 다음 해당 배열을 MySQL 데이터베이스에 저장하는 것입니다. 그런 다음지도 뷰를 열면 간단히 서버에서 배열을 가져 와서 약간 조작하면 데이터를 사용하여지도에 핀을 추가합니다.CLLocation 위치 지점을 배열에 저장하면 메모리/성능 문제가 발생합니다.

내가 말했듯이,이 모든 것은 잘 작동하고 있으며, 시뮬레이터와 장치에서 책상에 앉아서 (그리고 btw, 도구를 사용하여 - 누출 없음) 아름답게 작동합니다. 그러나 장치에서 응용 프로그램을 테스트하고 실제로 집을 나갔다가 거리에서 15 분 걸 으면 응용 프로그램이 CLLocationManager 개체가 업데이트를 중지하고 배열이 MySQL에 게시되는 시점에서 충돌합니다 - 거의 확실합니다 (생각합니다) 기억 문제 때문에.

그럴 경우, 나는 상대적인 멍청한 놈입니다. 그래서 부드럽게 생각합니다. 배열에 객체를 저장하는보다 효율적인 방법을 개발하는 조언을 찾고 있습니다. 그래서 아마도 엄청난 양의 저장이 이루어질 것입니다. 위치 정보가 앱을 녹이지는 않습니다.

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

예 - 배열에 더 많은 포인트가로드되어 있다는 것을 알고 있습니다. 내 문제는 그다지 (또는 그 이유가) 없습니다.로드가 더 많아서 앱이 충돌하고 있습니다. 문제를 해결하기 위해 앱을 디자인하는 메모리 친화적 인 방법이 더 있는지 궁금합니다. –

0

주요 업데이트 만 저장해야합니다. 첫 번째 킬로미터에 5 미터 간격으로 매분마다 차이를 저장하고 (사용자가 짧은 도보 거리에있을 경우), 달리기 위해 간다면 20-50 미터마다 차이점을 저장할 것입니다. array/CoreData가 백그라운드 스레드에서 같은 방향으로 가까운 값이나 값을 잘라낼 수도 있습니다.

관련 문제