2013-07-02 2 views
1
@property (nonomic,retain) CMMotionManager *motionManager; //delcare as a property. 

motionManager = [[CMMotionManager alloc] init]; //init it. 

motionManager.accelerometerUpdateInterval = 0.2f; 

아래의 내용은 모두 주 스레드가 아닌 스레드에서 수행됩니다. 가속도계 데이터 사용시 메모리 누수

-(void)handle{ 

    [motionManager startAccelerometerUpdates]; 
    while (1) { 
     CMAcceleration acceleration = motionManager.accelerometerData.acceleration; 
     NSLog(@"%f %f %f",acceleration.x,acceleration.y,acceleration.z); 
     sleep(0.5); 
    } 
} 

내가 엑스 코드에서 응용 프로그램을 실행

-> 악기, I 앱 받았습니다 메모리 온난화 때까지 생활 메모리 uninterruptly 증가 을 발견하고 시스템에 의해 살해. 나는 블록 동안 가속도계 데이터를 relase하려고합니다. 그러나 효과가 없습니다. motionManager.accelerometerData release]; 내가 startAccelerometerUpdatesToQueue을 사용하지 않으

은 : [NSOperationQueue currentQueue] withHandler : 나는 백그라운드에서 실행하려면, 그리고 becuase 응용 프로그램이 될 때^(CMAccelerometerData * accelerometerData, NSError * 오류),이 블록은 아무런 기능을하지 않습니다 매달린.

Can anyone help me? 

screenshot image:http://img.blog.csdn.net/20130702120140593 

답변

0

ARC를 사용하고 있습니까? 당신이 그것을 사용해야합니다.

또한 bakground 스레드에 자동 해제 풀이 있는지 확인해야합니다. ARC를 사용하는 자동 해제 풀을 생성하는 구문은 @autorelease { ... }이고 ARC가없는 구문은 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; ... [pool release];입니다.

Apple은 autorelease 풀이 작동하는 방법에 대한 훌륭한 문서를 가지고 있습니다. 하나는 주 스레드에 대해 자동으로 만들어 지지만 백그라운드 스레드에 대해 수동으로 만들어야합니다. 어떻게 작동하는지 배우는 데 몇 시간을 소비해야하며, obj-c 프로그래머에게는 필수 학습입니다.

코드를 모두 보지 않아도 작동 방법을 알 수는 없지만 스레드를 만드는 블록이나 메서드는 autorelease 풀에 래핑 된 콘텐츠와 while 루프에는 두 번째 자동 해제 풀이 필요합니다.


편집 : 이제 코드를 보았으므로 메모리 누수가 발생하지 않도록 @autoreleasepool을 사용해야하는 예제가 있습니다. 이 코드에 6과 23 행을 추가했습니다. https://gist.github.com/abhibeckert/5907754

테스트를 통과하지 못했으나 문제가 해결되었습니다. autorelease 풀이 없으면 확실히 메모리가 누수됩니다.

기본적으로 배경 스레드가 있거나 루프가 길면 각자 자신의 자동 풀 풀이 있어야합니다. 나는 이것을 읽는 것이 좋습니다 : http://developer.apple.com/library/ios/#documentation/cocoa/Conceptual/MemoryMgmt/Articles/mmAutoreleasePools.html

+0

@autorelease {...} 또는 NSAutoreleasePool을 사용하려고 시도하지만 문제가 항상 존재합니다. 내 프로젝트 URL : http://qq644531343.opendrive.com/files/Ml8yMjE0NjY3MV9kY2NUQl9mYWQ3/Testautoreleasepool.zip –

+0

@LiuLiBo 내 편집 된 답변보기. :-) –

+1

고맙습니다. 당신의 방법으로 문제가 해결되었습니다. –