내 응용 프로그램에서 메모리 누수가보고되었지만 정확히 무슨 일이 일어나고 있는지 추적 할 수 없습니다. 이전보기를 가져 와서 새로운보기로 전환하는 기능이 있습니다. NavControllers 또는 @properties를 사용하지 않습니다. 최상위 창을 직접 관리하고 있습니다. 코드를 실행하면코코아 메모리 누수 추적
-(void)swapInView:(UIViewController*)newViewController
{
[currentViewer.view removeFromSuperview];
printf("Old viewController (%p) has count of %d; now releasing\n",
currentViewer, [currentViewer retainCount]);
[currentViewer release];
currentViewer = 0;
currentViewer = newViewController;
[currentViewer retain];
[mainWindow addSubview:currentViewer.view];
[mainWindow bringSubviewToFront:currentViewer.view];
}
, 나는 현재 뷰 컨트롤러가 해제되고 있으며, 그 뷰 컨트롤러 내의 dealloc 메서드가 호출지고 있음을 보여준다. 그러나 계측기/누출은 여전히 누수로보고합니다. 예를 들어, 나는이 인쇄를 얻을 :
Old viewController (0x119f80) has count of 1; now releasing
Deallocating WelcomeScreenViewController
나는이 이전에 할당되는 같은 객체인지, 주소에서 확인할 수 있습니다.
MyViewController *theViewController = [[MyViewController alloc]
initWithNibName:nil
bundle:nil];
[GameMaster swapInNewView:theViewController];
[theViewController release];
이
아무도 무슨 일이 일어나고 있는지 추적하는 방법에 대한 제안 사항이 있습니까 :
내 외부 코드는 다음과 같이 보인다? 3.1.2 SDK를 사용하고 있지만 이전 SDK에서도이 기능을 볼 수있었습니다.
인스트루먼트는 어떤 특정 라인에서 누설이 발생한다고 말합니까? –
[mainWindow addSubview : currentViewer.view]; –
그래서'mainWindow'가 추가 된 하위 뷰를 유출하고있는 것으로 보입니다. 어떤 시점에서'mainWindow'에서 릴리스를 호출합니까? –