2010-04-26 7 views
3

저는 메모리 누수에 대해 항상 까다 롭습니다. 왜 쓰레기가 애플리케이션 누수를 수집했는지 이해할 수 없습니다. 내 코드는 전적으로 메모리로 관리되며 가비지 수집없이 실행되므로 누수가 많지 않습니다. 그러나 가비지 수집을 시작하자마자 누수가 발생합니다!쓰레기 수거가 누출 되었습니까? 브리지 리크 스크립팅?

요점을 증명하기 위해 왜이 가비지 수집 앱에서 누출됩니까? (위 아래 applicationDidFinishLaunching : 또한

NSOpenPanel *panel = [NSOpenPanel openPanel]; 
[panel beginSheetModalForWindow:window completionHandler:^(NSInteger result) {NSBeep();}]; 

에서이 더미 코드는 스크립팅 Bridge를 사용, 그렇지 않으면 쓰레기 수집 애플 리케이션 (에서 누수 또는)을 방지하는 방법은 무엇입니까? 마치 xcode에서 샘플 코드가 누수 된 것처럼 보입니다.

감사합니다.

+2

누출을 측정하기 위해 당신은 무엇을 사용하고 있습니까? 누수가 무엇입니까? –

답변

2

다음은 부분적인 대답입니다.

대부분의 관리되는 언어에서 다른 개체에 대한 참조를 보유 할 수있는 각 구조에는 오프셋이 메모리 주소를 보유 할 수있는 정보가 포함되어 있습니다. 예를 들어, 각 스택 프레임에는 가비지 컬렉터에게 주소를 찾는 위치를 알려주는 곳이 있습니다.

Objective-C와 같은 C 기반 언어에는 해당 언어가 없습니다.

프로그램의 정확성을 위해 개체를 너무 일찍 할당 해제하는 것보다 너무 많은 개체를 갖는 것이 좋습니다. 따라서 Objective-C의 가비지 수집기는 이 주소 인과 같은 패턴을 찾지 만 실제로 주소인지 여부는 알 수 없습니다. 이것은 참조에 대한 잘못된 긍정을 초래할 수 있습니다 (그리고 거의 바운드됩니다) (C에서 사용할 수있는 특정 메모리 관리 기술과 호환되지 않습니다). 따라서, 어떤 객체는 임의의 정수가 존재하지 않을 때까지 유용성을 유지할 수 있습니다.

또한 누수가 무엇인지 어떻게 알 수 있습니까? 메모리 사용량을 비교 했습니까? 아니면 '누출'도구를 통해 확인 했습니까? 'GC 모니터'도구를 사용해 보셨습니까?

0

죄송합니다. 언급하지 않으니 까, 악기에서 "누출"악기를 사용합니다. 누수가 보이는 곳이 있습니다. 아직 "GC 모니터"장비를 사용해 본적이 없습니다. 누수가 작기 때문에 확장 된 세부 정보를 사용하여 코드를 다시 추적 할 수는 없습니다.

저는 항상 내 기억 관리를 옛 방식으로 했으므로 본질적으로 나는 GC 초보자입니다.

GC 패턴이 정상입니까? 방금 무시해야합니까?