【问题标题】:ios pop over [WEPopoverController] crashingios 弹出框 [UIPopoverController] 崩溃
【发布时间】:2012-09-10 09:53:47
【问题描述】:

我在我的应用程序 WEPopoverController 中显示一个弹出窗口,

它在用户点击按钮后出现和消失,

有时效果很好, 但其他时候它会崩溃,比如如果我打开 i 并关闭它很多次它会崩溃,所以我不知道我在这个对象的内存管理中缺少什么,

- (void)showPopOver 
{

    if(!self.navPopover) {
          CGRect frame ;
        frame = CGRectMake(0, 0, 270, 132);

        UIViewController *viewCon = [[UIViewController alloc] init];

         viewCon.contentSizeForViewInPopover = frame.size;

        self.navPopover = [[WEPopoverController alloc] initWithContentViewController: viewCon];

        [self.navPopover setDelegate:self];

    } 

    if([self.navPopover isPopoverVisible]) {
        [self.navPopover dismissPopoverAnimated:YES];
        [self.navPopover setDelegate:nil];
        //[self.navPopover autorelease];
        self.navPopover = nil;

        [self.navPopover release];

        //[_navPopover release];
         NSLog(@"sconda");
    } else if (![self.navPopover isPopoverVisible]){



        [self.navPopover presentPopoverFromRect:CGRectMake(134,440, 50, 96)


                                         inView:self.view
                       permittedArrowDirections: UIPopoverArrowDirectionDown

        animated:YES];

        NSLog(@"tanga");
    }


}

非常感谢,

【问题讨论】:

  • 您不使用 ARC 是否有特定原因?

标签: ios memory-management uipopovercontroller


【解决方案1】:

re: 内存管理,这肯定是错误的:

self.navPopover = nil; 
[self.navPopover release]; 

通过 niling 指针,您并没有释放对象。颠倒这几行代码的顺序

[self.navPopover release]; 
self.navPopover = nil; 

【讨论】:

  • 因内存泄漏而耗尽内存最终会导致崩溃
【解决方案2】:

你有 DidDismissPopover 吗?

 - (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController {
self.navPopover = nil;
} 

你应该以这种方式关闭而不是在 showPopover 上关闭

啊,不要在这里发布

 [self.navPopover release];
 NSLog(@"sconda");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-13
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多