2017-02-01 3 views
0

지금 당장 이상한 문제가 있습니다. 내 프로그램의 어느 시점에서 나는 OSX에서 시스템의 마우스 커서를 잡는다. 이를 위해 다음을 수행합니다.NSCursor 메모리 누수 (currentSystemCursor)

NSCursor *cursor = [NSCursor currentSystemCursor]; 

커서를 사용하여 문제를 테스트하는 모든 작업을 제거했습니다. 하지만이 한 번의 호출로 엄청난 메모리 누수가 발생합니다 (커서는 초당 여러 번 캡처됩니다). 약 50MB/s의 메모리 누출.

어떻게 든 커서를 해제해야합니까? 문서 (https://developer.apple.com/reference/appkit/nscursor/1533611-currentsystemcursor?language=objc)에 따르면 올바르게 이해하면 currentSystemCursor은 시스템 커서의 복사본을 제공합니다. 하지만 메모리를 공개해야하는지에 대해서는 언급하지 않았습니다.

현재 내 프로그램은 ARC를 사용하지 않습니다.

+0

이 누출을 어떻게 발견 했습니까? Xcode에서 메모리 그래프보기를 사용해 보셨습니까? 누출을 보여주는 최소한의 코드 샘플을 제공 할 수 있습니까? 프로그램이 스레딩을 사용하고 있습니까? 또는 반복적으로 커서를 캡처하는 루프를 실행하고 있습니까? – uliwitness

답변

0

지금까지 문제를 발견했습니다. 문제는 커서가 pthread 라이브러리를 사용하여 생성 된 다른 스레드에서 움켜 잡혔습니다. 스레드에서 autoreleasepool 구현하고 메모리 누수가 사라졌습니다.