다음 스레드는 현재 마우스 커서가 들어있는 화면을 찾는 방법을 설명 :이 모든 마우스 움직임에서 실행 한NSArray objectEnumerator의 메모리 누수?
http://www.cocoabuilder.com/archive/cocoa/104529-current-mouse-screen.html
- (NSScreen *)currentScreenForPointUsingEnumeration:(NSPoint)aPoint
{
NSEnumerator *screenEnumerator = [[NSScreen screens] objectEnumerator];
NSScreen *screen;
while ((screen = [screenEnumerator nextObject]) && !NSMouseInRect(aPoint, screen.frame, NO));
return screen;
}
.
Xcode의 계측기 도구에서 "할당"기능을 사용하면 위의 코드는 NSFastEnumeration
의 많은 할당을 보여줍니다.
"누출"이 분석기에 나타나지 않지만 할당 수는 계속 증가하고 결코 감소하지 않습니다. 앱의 전체 메모리 사용량 또한 계속 증가합니다.
for(...)
루프를 사용하는 유사한 기능에는 동일한 문제가 없습니다.
여기서 성능을 향상시킬 수있는 방법이 있습니까? 아니면 내가 걱정해서는 안되는 것입니까?
는 편집 : 그런데
, [[[NSScreen screens] objectEnumerator] autorelease]
을 시도하는 앱을 충돌하고 완전히 내 마우스를 잠급니다. 클릭하거나 앱 또는 Xcode를 종료하는 방법을 찾을 수 없습니다. OS X을 다시 시작해야합니다. 그러지 마라.
"Xcode의 분석 도구"는 Instruments를 의미합니까? Instruments는 Clang 정적 분석기와 매우 다르며 런타임에 아직 실행되지 않았기 때문에 정적 분석기는 런타임에 축적되는 개인 구현 세부 개체를 감지 할 수 없습니다. –
오른쪽, Instruments의 "Allocations"도구. 나는 그 질문을 편집 할 것이다. – cksubs
'objectEnumerator'는 소유하고있는 객체를 반환하지 않습니다. 당신은 그 이름으로 이것을 말할 수 있습니다. 따라서, 그 객체에'autorelease '를 보내는 것은 잘못된 것이다. –