如何解决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;
}
这样,您将始终在需要的地方保存弹出窗口的实例,并在完成后将其释放。在您以前的实现中,该实例未绑定任何对象。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。