UIPopoverController的contentViewController.viewDidUnload没有被调用

时间:2012-05-30 18:26:50

标签: objective-c uipopovercontroller viewdidunload

当我使用UIPopoverController并给它一个contentViewController时,我似乎无法正确释放contentViewController(事实证明,事件是不会调用contentViewController.viewDidUnload)。

用于创建和显示弹出窗口的代码:

PopupTestViewController *popupTest = [[PopupTestViewController alloc] initWithNibName:@"PopupTestViewController" bundle:nil];
popupTest.mainViewController = self;
self.popoverController = [[UIPopoverController alloc] initWithContentViewController:popupTest];
self.popoverController.popoverContentSize = popupTest.view.frame.size;
self.popoverController.delegate = self;
[self.popoverController presentPopoverFromRect:button.frame inView:button.superview permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

现在我假设当contentViewController关闭时,PopoverTestViewController(在上面的代码中,这是UIPopoverController应该被取消分配点击它,或明确地解雇它)。但viewDidUnload从未被调用过。但是,我注意到,如果我为PopoverTestViewController定义一个dealloc方法,那就适当地调用。

所以我的问题是:为什么viewDidUnload永远不会被调用? (我正在使用ARC)。

2 个答案:

答案 0 :(得分:0)

这与我使用UIPopoverController略有不同。由于您手动alloc'ed popupTest,您肯定需要手动release它。 <{1}}实例将在调用UIPopoverController时保留popupTest

此外,如果您使用initWithContentViewController:定义popoverController属性,那么当您使用retain setter时,您可以通过{{1}直接分配来获得双重保留}}。设置self.popoverController的一般模式是:

alloc

答案 1 :(得分:0)

viewDidUnload无法保证被调用。只有在应用程序收到内存警告并且接收ViewController已加载view但屏幕不亮时才会调用它。 加载view并且保留计数达到零时,不会调用viewDidUnload

您可以在documentation中找到更多详细信息。 有关何时释放哪些对象的说明可以在同一document中找到。