UIViewController loadView方法 - alloc&#d; d对象的范围

时间:2012-05-30 17:21:54

标签: objective-c memory-management uiview uiviewcontroller

我是以编程方式在视图控制器的loadView方法中创建视图。如下:

  

- (void)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堆栈。每个视图都包含一个使用push的按钮。如下:

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

我在viewDidLoad中没有任何代码 - 事实上,我的视图控制器中完全没有这些代码。

一切正常,但当我在iOS模拟器中进行模拟内存警告时,应用程序崩溃了。我认为问题在于我将视图定义为loadView中的“本地”变量。

有人能告诉我我的loadView是否正常,或者是否有必要以不同的方式定义loadView以避免无效的引用等。

非常感谢。

1 个答案:

答案 0 :(得分:0)

问题是该视图持有对控制器的引用。当视图被卸载时,控制器参考超出范围,所以繁荣!