문제

UIViewControllers를 재사용하는 가장 좋은 프레이트는 무엇입니까? 많은 앱 (Apple 자체 예제 포함 : SQLitebooks)에서 UIViewControllers는 매번 할당되고 초기화되면 UIViewController가 스택으로 푸시됩니다. 객체가 메모리에 유지되고 다시 사용되지 않기 때문에 모든 새로운 컨트롤러와 함께 메모리 사용이 증가합니다.

더 나아지는 방법?

도움이 되었습니까?

해결책

이것은 새로운 ViewController를 만들 때 내가하는 일이며 창에서보기가 제거 될 때 메모리가 해제됩니다.

MyViewController *mvc = [[[MyViewController alloc] initWithNibName:@"MyView" bundle:nil] autorelease];
[[self navigationController] pushViewController:mvc animated:YES];

다른 팁

객체가 메모리에 머무르고 다시 사용되지 않기 때문에 모든 새 컨트롤러와 함께 메모리 사용이 증가합니다.

다른 것을 가지고 있지 않은 한 스택이 튀어 나올 때 해제되어야합니다. 거래소 방법이 호출되는지 확인하십시오.

또한 스택으로 밀려 나면 적어도 튀어 나올 때까지 (표준 패턴을 따르는 경우 자동으로 발생)를 유지해야합니다. 그래서 ~이다 다시 사용됩니다.

따라서 표준 패턴을 따르면 이미 메모리 사용량을 멀리 할 수있는만큼 작게 유지해야합니다.

실제로 해결하려는 메모리 문제가 있습니까? 조기 최적화? 특정 리소스 문제가 없다면 모범 사례는 표준보기 컨트롤러 패턴을 따르는 것입니다.

View Controller의 DealLoc 함수에 중단 점을 놓고 Window에서 View Controller를 제거 할 때 호출되는지 확인하십시오. 메모리는 계속 쌓여서는 안됩니다. 컨트롤러를 올바르게 생성하고 자동 표시하는 경우 (위의 LostIntransit 표시와 같이) 각 컨트롤러의 메모리를 제거하면 해제해야합니다.

Dealloc이 호출되지 않는 것을 보면 앱 어딘가에 View Controller에 대한 참조가 여전히 존재한다는 것을 의미합니다.

View Controller가 귀하의보기가 아니라는 것을 잊지 마십시오.

View Controller가 보유한 뷰는 언로드 할 수 있으므로 뷰 컨트롤러 자체는 매우 가볍습니다. 풋 프린트를 실제로 밝게 유지하려면 컨트롤러가 ViewDidunLoad에 할당 한 다른 데이터를 무효화 할 수 있습니다 (주로 메모리 경고가있을 때 호출 - 3.0 전용입니다).

주로 뷰 컨트롤러가 남겨두면 (뒤로 hall) 거래가되므로 일반적으로 어쨌든 매달려있는 것은 아닙니다. 그러나 때로는 사용자가 남은 동일한 상태에서 해당보기를 다시 열고 싶다면 참조를 남기는 것이 편리합니다 (앱 시작 사이에 작동하지 않음).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top