UIPopoverController并在delegate-method中发布; “潜在的内存泄漏”

时间:2011-05-25 09:22:39

标签: ios memory-management uipopovercontroller

我正在使用我的UIPopoverController进行alloc / init,然后在委托方法中释放它。每当我执行“构建和分析”时,我会收到“潜在泄漏”的内存警告 - 我做错了什么或有办法摆脱这些警告吗?

非常感谢!

- (void) somewhere {
    MyViewController *vc = [[MyViewController alloc] init];
    UIPopoverController *popover=[[UIPopoverController alloc] initWithContentViewController:vc];
    [vc release];

    // show the popover
    [popover presentPopoverFromRect:[cell frame] inView:self.tableView permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
    popover.delegate = self;
}

- (void) popoverControllerDidDismissPopover:(UIPopoverController *)popoverController {
   [popoverController release];
   popoverController = nil;
}

编辑:显示完成某处功能

1 个答案:

答案 0 :(得分:0)

首先,在popoverControllerDidDismissPopover:方法中,您应该发布popoverController实例,因为它将由框架发布。

其次,somewhere方法的含义是什么?你应该在这里发布完整的实现...我想你正在显示popover视图,所以你应该这样做:

- (void) somewhere {

    // I suppose you have a local variable to hold the controller
    _myPopover = [[UIPopoverController alloc]   initWithContentViewController:vc];
    _myPopover .delegate = self;

    // ... do other things to configure the popover, if necessary

    // I suppose you show it, with something like this
    [_myPopover presentPopoverFromRect:yourRect inView:yourView permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 
}

然后,当您不再需要弹出控制器时,您可以释放它。您可以尝试使用您的代码:

- (void) popoverControllerDidDismissPopover:(UIPopoverController *)popoverController {
    [_myPopover release];
    _myPopover = nil;
}

这样,您将始终在需要的位置保存弹出框的实例,并在完成后将其释放。在您之前的实现中,该实例未绑定任何内容。