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