gpt4 book ai didi

iphone - UIPopoverController 和内存管理

转载 作者:太空狗 更新时间:2023-10-30 03:50:56 24 4
gpt4 key购买 nike

    UIPopoverController *historyPop = [[UIPopoverController alloc] initWithContentViewController:nav];
[nav release];
[historyPop setPopoverContentSize:CGSizeMake(400, 500)];
[historyPop presentPopoverFromRect:CGRectMake(button.frame.origin.x, button.frame.origin.y, button.frame.size.width, 5) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES];
//[historyPop release];

这是我当前的代码,但是分析器说这可能是泄漏,确实存在(因为发布行被注释掉了)。但是,如果我取消对发布行的注释,那么应用程序会崩溃,并说 dealloc 已到达 popover,但它仍然可见,那么我到底应该什么时候释放 popover Controller ?

最佳答案

如多处所述,呈现弹出框的方法(来自矩形或工具栏按钮)不保留弹出框。因此,您的呈现 View Controller 需要持有对它的引用并在适当的时候释放它。

如前所述,您可以通过将呈现 View Controller 设置为弹出窗口的委托(delegate)来实现此目的。一种更简单但内存效率稍低的方法是声明一个保留属性来保存 UIPopoverController。当您创建弹出窗口时,您将其分配给保留它的属性。如果您稍后创建另一个弹出窗口,它会在您重新分配属性时释放之前的弹出窗口。不要忘记在呈现 View Controller 的 dealloc 方法(以及 viewDidUnload)中释放该属性。

这种方法不会泄露,也不需要和委托(delegate)打交道。但是,您可能会将 UIPopoverController 对象保留得比必要的时间更长。您可以自行决定这是否是您的应用所关心的问题。

关于iphone - UIPopoverController 和内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4380660/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com