2012-09-06 5 views
0

내가있는 navigationController 등에 setViewControllers을 사용하고 있습니다 :UINavigation의 setViewControllers : 메모리 할당

XYZController *xyz = [XYZController alloc] initWithXibName:@"XYZController"]; 
[myNavController setViewControllers:xyz]; 
[xyz release]; 

나는 악기의 할당을 확인하고, 그러나 내가 발견 한 많은 시간이이 함수 호출 기기의 증가에 살고있는 객체,이 기능이있는 경우 5 시간 동안 #live에서 5 시간 악기 쇼라고 불립니다.

즉 메모리를 할당한다는 의미입니다. 어떻게 메모리 할당을 처리합니까?


편집는 :

RootViewController *rootController = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil]; 
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:rootController]; 
[rootController.navigationController.navigationBar setHidden:YES]; 
[self.myNavController setViewControllers:nil]; 
[self.myNavController setViewControllers:[NSArray arrayWithObjects:navController,nil]]; 
[rootController release]; 
[navController release]; 

이 내 응용 프로그램에서 사용하고있는 실제 코드입니다. 여기서 문제는이 코드 조각에 대한 호출이있을 때마다 항상 계기에서 생체 수를 증가시키는 rootController입니다. rootController 카운트가 증가 할뿐만 아니라 클래스 변수도 해제되지 않으므로 메모리가 쌓입니다. 결과적으로 내 응용 프로그램의 성능이 크게 저하됩니다.

이 부분에 대해 알려주십시오.

답변

0

첫째, 악기는 메모리 할당을 볼 때 오탐 (false positives)을 제공 할 수 있으므로 이러한 경고를 염분으로 채 웁니다. 그것은 (당신의 코드에있는 에러를 제외하고) 나에게 상당히 유효하게 보일 것입니다. myNavControllerUIViewController 년대, 위 가지고 있지 단일 뷰 컨트롤러의 배열을 기대로 setViewControllers를 호출 할 때 충돌 것 (나는 가정합니다 UINavigationController이다)로

둘째, 코드가 올바르지 않습니다. 이것은 대부분 충돌 할 수도 있고 컴파일하지 않을 수도 있습니다.

코드가 유효한지 확인하고 계측기를 다시 실행하십시오. 여전히 동일한 문제가 발생하는 경우 이는 아마 거짓 긍정이며 무시해야합니다.

+0

빠른 답장을 보내 주셔서 감사합니다. myNavController는 UINavigationController이고 setViewControllers는 하나의 View Controller만을 가지고있다. – parilogic

0

(NSZombiesEnabled 인수 또는 Scheme Diagnostics에서) 좀비를 사용하여 메모리 사용량을 테스트하지 않았는지 확인하십시오. 좀비는 기본적으로 삭제되지 않습니다.