2012-05-30 4 views
0

프로그래밍 방식으로 내 View Controller의 loadView 메서드에서 뷰를 만듭니다. 다음과 같이UIViewController loadView 메서드 - alloca 객체의 범위

- (무효)에는 loadView {

HPSFormView* viewForThisController = [ [ HPSFormView alloc ] initWithFrame:CGRectZero ] ; 
viewForThisController.controller = self; // Set a reference back to this controller so the View knows who to delegate stuff to when > adding controls 
self.view = viewForThisController; // Set the view for this controller to be the main menu view 

}

을 내가보기 컨트롤러와 뷰의 세 가지 다른 쌍에 대한이 기술을 따르십시오. UINavigationController 스택에보기 컨트롤러를 밀고있다. 각보기에는 푸시를 사용하는 버튼이 있습니다. 다음과 같이 :

-(void)buttonTapped:(id)sender { 
    HPSFormController* formVC = [ [ HPSFormController alloc ] initWithNibName:nil bundle:nil ]; 
    [(UINavigationController*) self.view.window.rootViewController pushViewController:formVC animated:YES]; 
} 

viewDidLoad에는 코드가 없습니다. 실제로 뷰 컨트롤러에는 전혀 없습니다.

모든 것이 잘 작동하지만 iOS 시뮬레이터 내에서 Simulate Memory Warning을 실행하면 앱이 다운됩니다. 로드 뷰 내에서 내 뷰를 '로컬'변수로 정의하는 방식에 문제가 있다고 생각합니다.

사람은 내에는 loadView가 좋아 보이는, 또는 등 유효하지 않은 참조

많은 감사를 피하기 위해 다른에는 loadView를 정의 할 필요가 있는지 여부를 말해 줄 수 없습니다.

답변

0

문제는 뷰가 컨트롤러에 대한 참조를 보유하고 있다는 것이 었습니다. 뷰가 언로드되면 컨트롤러 참조가 범위를 벗어 났으므로 붐!

관련 문제