OGeek|极客世界-中国程序员成长平台

标题: objective-c - 这怎么不是内存泄漏 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 21:12
标题: objective-c - 这怎么不是内存泄漏

我试图弄清楚以下方法如何导致内存泄漏。 UIPopoverController 已分配,但是,如果我包含 autoreleaserelease 调用,应用程序将崩溃,并显示消息 '-[ 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-推荐答案


这仍然是内存泄漏!

您必须在您的类中保留对弹出框 Controller 的引用和/或实现委托(delegate)方法 popoverControllerDidDismissPopover您可以在那里释放它)。
当你调用它的“present...”方法时,popover Controller 不会保留它自己,如果它被释放并且仍然可见,则会引发异常

关于objective-c - 这怎么不是内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10760402/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://sqlite.in/) Powered by Discuz! X3.4