问题描述
|
我正在用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;
}
这样,您将始终在需要的地方保存弹出窗口的实例,并在完成后将其释放。在您以前的实现中,该实例未绑定任何对象。