0

我的UIPopoverController项目中有一个包含 UIDatePicker 作为其内容的 ViewController。

单击按钮时会显示一个弹出框。在分配弹出框及其内容后,应用程序内存增加了大约 2.5 MiB。

由于我在内存中有 2 个单独的弹出框实例,它增加了大约 5mb。

我的问题是弹出框被解雇后,它的内存永远不会被释放。此外,由于我启用了 ARC,我无法手动释放它。

任何人都可以指导我如何在与 ARC 一起使用 popover 时释放内存。

以下是代码:

-(IBAction)btnDateSelect:(id)sender
{

    CGRect popoverRect;
    appDelegate.objDtPicker = [[ViewDatePicker alloc]init];
    appDelegate.objDtPicker.delegate = self;

    self.popOver = [[UIPopoverController alloc]initWithContentViewController:
    appDelegate.objDtPicker]; 
    popOver.delegate = self;

    if ([sender tag] == 70) 
    {
        popoverRect = [self.view convertRect:[btnFromDate frame] 
                                    fromView:[btnFromDate superview]];
        bFromDate = TRUE;
        bToDate = FALSE;

    }
    else 
    {
        bFromDate = FALSE;
        bToDate = TRUE;
        popoverRect = [self.view convertRect:[btnToDate frame] 
                                    fromView:[btnToDate superview]];
    }


    popOver.popoverContentSize=CGSizeMake(400.0,216.0);
    [popOver presentPopoverFromRect:popoverRect inView:self.view 
           permittedArrowDirections:UIPopoverArrowDirectionDown 
                           animated:NO];
}
4

2 回答 2

2

我猜self.popOver是一个强大的属性?它由该属性保留。当您关闭视图时,您可以将此属性设置为 nil(使用委托方法)。

于 2012-07-02T10:14:23.757 回答
0

你确定问题是弹出框没有被释放吗?可能是系统正在缓存图像或其他数据。内存警告后额外的内存使用是否消失?(您可以在模拟器中模拟其中之一。)如果额外的内存使用量在内存警告后消失,这可能不是问题。

您可以尝试使用“Allocations”或“Leaks”工具运行您的应用程序,这可以让您了解弹出框是否实际上正在被释放,以及实际占用了您的 5 MB。

于 2012-07-02T15:45:51.097 回答