2013-06-21 3 views
0

나는이 튜토리얼을 따라 : http://blogs.captechconsulting.com/blog/john-morrison/ios-getting-started-accelerometer-data 내 iPhone 앱이 가속도계를 수신하도록했습니다. CMMotionManager를 내 AppDelegate에 추가하고 뷰 콘트롤러에서 애플리케이션의 CMMotionManager를 읽는 속성을 추가했습니다. 이제 앱에서 메모리 사용량 경고가 표시됩니다.ios cmmotionanager 메모리 사용량

나는 메모리 프로파일 러 계측기에 응용 프로그램을 연결하고 응용 프로그램과 상호 작용하지 않고 테이블에 고정되어있을 때 메모리 사용이 선형 적으로 늘어나는 것을 볼 수 있습니다. 범인이 코드에있는 것으로 나타납니다

[self.motionManager setDeviceMotionUpdateInterval:0.1]; 
aQueue=[[NSOperationQueue alloc]init]; 
[self.motionManager  startDeviceMotionUpdatesToQueue:aQueue 
withHandler:^(CMDeviceMotion *motion, NSError *error) 
{ 
    if (motion.userAcceleration.x > movementThreshold || motion.userAcceleration.y > movementThreshold || motion.userAcceleration.z > movementThreshold) { 
     movementCount = 5; 
    }; 

    motion = nil; 
}]; 

첫 번째 예는 내가 내보기 컨트롤러의 멤버 변수 인으로 큐를 이동 최후의 수단으로 인라인으로 정의 된 큐를, 없었다 - 어느 쪽도 많은 영향을 미칠 것으로 보인다. 업데이트 간격을 설정하지 않으면 메모리 사용량이 증가하지 않습니다. 업데이트 간격을 설정하면 메모리가 커집니다.

moveCount는 viewController의 개인용 int로 선언되며 최근 전화 이동을 추적하는 데 사용됩니다. 다른 스레드가 시간이 지남에 따라 카운터를 0으로 천천히 다시 재설정합니다 ...하지만 해당 스레드를 활성화/비활성화하면 메모리 사용량에 영향을 미치지 않으므로 코드를 남겨 두었습니다 ...

아무 것도 보이지 않습니다. CMMotionManager가 과도한 메모리 사용을 유발할 수 있다는 웹 경고 메시지가 표시되지만 앱을 계속 실행하면 매 5Mg의 메모리가 소모됩니다 ... 내 문제의 근원을 알 수있는 트릭이 있습니까?

+0

자습서에는 응용 프로그램에서 선언 된 CMMotionManager가 있습니다. 게이트,하지만 grins에 대한 대부분의 자습서가있는보기 컨트롤러에 alloc을 옮겼습니다. - 할당을 뷰 컨트롤러로 옮기면 메모리 "누수"가 사라졌습니다 ... 이제 메모리 사용이 훨씬 안정적으로 나타납니다. 그러나 공통된 CMMotionManager를 사용하고 싶지는 않습니까? 더 좋지 않겠습니까? ... * 불만 * – jkrebsbach

답변

1

내가 잘못된 열 (스크린 샷)을보고있는 것처럼 보입니다. "라이브 바이트"를 사용해야했지만 "전체 바이트"를보고있었습니다 ... 내 인생에서 6 시간 동안 돌아 가지 않습니다. ..

+0

나는 문제를 깨달았습니다. 나는 계기판에서 잘못된 열을보고있었습니다. 첫 번째 열에는 "전체 바이트"가 표시됩니다. 이는 응용 프로그램의 총 소비량으로 가정했습니다. 분명히 그 열은 응용 프로그램의 수명 동안 응용 프로그램이 사용한 바이트 수이지만 현재 사용중인 숫자는 아닙니다. 필자가 살펴보아야 할 열은 두 번째 열, "Live Bytes"입니다. 실제로 사용 된 바이트 수를 나타내는 열입니다. Overall Bytes는 절대로 내려 가지 않지만 Live Bytes는 위아래로 이동합니다. 나는 왜 지금까지 그것을 볼 수 없었는지 모르겠다. – jkrebsbach