菜鸟教程小白 发表于 2022-12-12 21:12:11

objective-c - 这怎么不是内存泄漏


                                            <p><p>我试图弄清楚以下方法如何<strong>不</strong>导致内存泄漏。 <code>UIPopoverController</code> 已分配,但是,如果我包含 <code>autorelease</code> 或 <code>release</code> 调用,应用程序将崩溃,并显示消息 <code>'-[ UIPopoverController dealloc] 在 popover 仍然可见时到达。'</code>.</p>

<pre><code>-(void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control {
    ;

    if ( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ) {
      UIViewController *con = [ init];
      UIPopoverController *poc = [ initWithContentViewController:con];

      ;

      poc.popoverContentSize = CGSizeMake( 320, 320 );
      ;
    }
    else {
      ;   // TODO (miked): display stuff another way
    }
}
</code></pre>

<p>这似乎违背了基本的内存管理实践。</p>

<p>附言我没有启用 ARC。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>这仍然是内存泄漏!</p>

<p>您必须在您的类中保留对弹出框 Controller 的引用和/或实现委托(delegate)方法 popoverControllerDidDismissPopover:(您可以在那里释放它)。
<br/>当你调用它的“present...”方法时,popoverController 不会保留它自己,如果它被释放并且仍然可见,则会引发异常</p></p>
                                   
                                                <p style="font-size: 20px;">关于objective-c - 这怎么不是内存泄漏,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/10760402/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/10760402/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: objective-c - 这怎么不是内存泄漏