2012-08-17 34 views
1

在我宣布两个实例变量我的主要的viewController如下:驳回一个UIPopoverController不卸载contentController

UIPopoverController* __popoverController; 
HPSQuestionnaireEditorController* _questionnaireEditorController; 

我再展UIPopOver如下:

_questionnaireEditorController = [ [ HPSQuestionnaireEditorController alloc ] initWithNibName:nil bundle:nil ]; 
__popoverController.delegate = self; 
[__popoverController setPopoverContentSize:CGSizeMake(400, 500)]; 
[_questionnaireEditorController setContentSizeForViewInPopover:CGSizeMake(400, 500)]; 
[__popoverController presentPopoverFromRect:editWrapper.frame inView:editWrapper.superview permittedArrowDirections:UIPopoverArrowDirectionLeft | UIPopoverArrowDirectionRight animated:YES ]; 

到时候解雇popover我手动这样做如下:

[__popoverController dismissPopoverAnimated:YES ]; 
__popoverController = nil; 
_questionnaireEditorController.view=nil; 
_questionnaireEditorController=nil; 

我正在使用ARC。

内_questionnaireEditorController我有以下几点:

- (void)viewWillUnload 
{ 
    NSLog(@"HPSQuestionnaireEditorController viewWillUnload starting"); 
} 

然而,这绝不运行。 popover解除似乎并未实际卸载视图或托管在其中的控制器。

我在做什么错?谢谢。

回答

1

你没有做错什么。 UINavigationControllers,UIPopoverControllers和UITabBarControllers在关闭屏幕时不需要卸载视图。他们拥有缓存的后端,直到完全没有必要或者需要记忆为止。

如果你不需要它卸载,那么你会没事的。不要担心。

+0

麻烦是我真的要卸载控制器 - 我依靠viewWillUnload取消注册一些通知 – whatdoesitallmean 2012-08-17 14:14:24

+0

你不应该那样做。您应该在viewWillDisappear或ViewDidDisappear上取消注册通知。一般来说,当然。 – 2012-08-17 14:23:48

+0

非常感谢 – whatdoesitallmean 2012-08-17 14:40:23

1

viewWillUnload(和viewDidUnload)在您的视图控制器被解除分配时不一定会被调用 - 它们通常只在响应内存警告时被调用。根据UIViewController reference,在这两种方法的描述:

当低内存条件发生并且不需要当前视图控制器的 视图,该系统可以选择从 内存中删除这些看法。

如果有任何必要的清理,请在dealloc中执行。如果清理只是将保留的属性设置为零,并且您使用的是ARC,则不需要用dealloc来打扰。