我试图弄清楚以下方法如何不导致内存泄漏。 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。
Best Answer-推荐答案 strong>
这仍然是内存泄漏!
您必须在您的类中保留对弹出框 Controller 的引用和/或实现委托(delegate)方法 popoverControllerDidDismissPopover您可以在那里释放它)。
当你调用它的“present...”方法时,popover Controller 不会保留它自己,如果它被释放并且仍然可见,则会引发异常
关于objective-c - 这怎么不是内存泄漏,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/10760402/
|