我试图弄清楚以下方法如何不导致内存泄漏。 UIPopoverController
已分配,但是,如果我包含 autorelease
或 release
调用,应用程序将崩溃,并显示消息 '-[ UIPopoverController dealloc] 在 popover 仍然可见时到达。'
.
-(void)mapViewMKMapView *)mapView annotationViewMKAnnotationView *)view calloutAccessoryControlTappedUIControl *)control {
[mapView deselectAnnotation:view.annotation animated:TRUE];
if ( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ) {
UIViewController *con = [[UIViewController alloc] init];
UIPopoverController *poc = [[UIPopoverController alloc] initWithContentViewController:con];
[con release];
poc.popoverContentSize = CGSizeMake( 320, 320 );
[poc presentPopoverFromRect:view.bounds inView:view permittedArrowDirections:UIPopoverArrowDirectionAny animated:TRUE];
}
else {
; // TODO (miked): display stuff another way
}
}
这似乎违背了基本的内存管理实践。
附言我没有启用 ARC。
这仍然是内存泄漏!
您必须在您的类中保留对弹出框 Controller 的引用和/或实现委托(delegate)方法 popoverControllerDidDismissPopover您可以在那里释放它)。
当你调用它的“present...”方法时,popover Controller 不会保留它自己,如果它被释放并且仍然可见,则会引发异常
关于objective-c - 这怎么不是内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10760402/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |