在我的主viewController中,我有两个声明如下的ivars:
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 dismissal似乎并未实际卸载视图或托管在其中的控制器。
我做错了什么?感谢。
答案 0 :(得分:1)
你没有做错任何事。 UINavigationControllers,UIPopoverControllers和UITabBarControllers在屏幕外时无需卸载视图。他们拥有缓存后端,直到它们绝对不必要或者需要内存。
如果你不需要它卸载那么你会没事的。别担心。
答案 1 :(得分:1)
当出现内存不足的情况和当前视图控制器时 如果不需要视图,系统可能会选择从中删除这些视图 存储器中。
如果有任何必要的清理,请在dealloc中进行。如果清理只包括将保留属性设置为nil并且您正在使用ARC,则无需使用dealloc。