当我使用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)。
答案 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中找到。