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;
}
编辑:显示完整的某处功能     

解决方法

首先,在
popoverControllerDidDismissPopover:
方法中,您不应释放
popoverController
实例,因为它将由框架释放。 其次,“ 3”法的含义是什么?您应该在此处发布完整的实现...我想您正在显示弹出视图,因此您应该执行以下操作:
- (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;
}
这样,您将始终在需要的地方保存弹出窗口的实例,并在完成后将其释放。在您以前的实现中,该实例未绑定任何对象。     

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...