在我的主viewController中,我有两个ivar,声明如下:
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 ];当需要关闭弹出窗口时,我会手动执行以下操作:
[__popoverController dismissPopoverAnimated:YES ];
__popoverController = nil;
_questionnaireEditorController.view=nil;
_questionnaireEditorController=nil;我正在使用ARC。
在_questionnaireEditorController中,我有以下内容:
- (void)viewWillUnload
{
NSLog(@"HPSQuestionnaireEditorController viewWillUnload starting");
}但是,这永远不会运行。弹出取消似乎并不实际卸载视图或驻留在其中的控制器。
我做错了什么?谢谢。
发布于 2012-08-17 22:10:34
你没做错什么。UINavigationControllers、UIPopoverControllers和UITabBarControllers不需要在你的视图离开屏幕时立即卸载它。它们有缓存后端,这些后端会一直持有它们,直到完全不必要或需要内存。
如果你不需要它来卸载,那你就没问题了。不必为那事担心了。
发布于 2012-08-17 22:18:49
当您的视图控制器被释放时,不一定会调用viewWillUnload (和viewDidUnload) --它们通常只在响应内存警告时调用。根据UIViewController reference,在这两种方法的描述中:
当出现内存不足的情况并且不需要当前视图控制器的视图时,系统可能会选择从内存中删除这些视图。
如果有任何必要的清理,请在dealloc中进行。如果清理只是将保留属性设置为nil,并且您使用的是ARC,那么您不需要费心使用dealloc。
https://stackoverflow.com/questions/12007348
复制相似问题