首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >释放一个需要大量内存的弹出窗口

释放一个需要大量内存的弹出窗口
EN

Stack Overflow用户
提问于 2011-08-26 23:27:22
回答 1查看 438关注 0票数 0

我正在使用一个弹出式视图来呈现大量的旗帜,您可以从中选择。我的代码有问题,因为在我打开这个弹出窗口后不久,内存没有被释放(视图控制器"flagsViewController“是正常的和干净的,它初始化并释放它里面的每一项。

我做错了什么?如何在关闭弹出窗口后立即释放内存?

代码语言:javascript
复制
    -(void)presentFlags
    {
        [self.popoverController dismissPopoverAnimated:YES];

        FlagsViewController *controller = [[FlagsViewController alloc] 
                                            initWithNibName:@"FlagsViewController" 
                                            bundle:[NSBundle mainBundle]] ;

        UINavigationController *container = [[UINavigationController alloc] initWithRootViewController:controller];

        UISegmentedControl *ctrl = [[UISegmentedControl alloc] initWithItems:segmentedItems];
        ctrl.frame = CGRectMake(0, 6, 500, 30);
        [ctrl addTarget:self action:@selector(changeSeg:) forControlEvents:UIControlEventValueChanged];
        ctrl.segmentedControlStyle = UISegmentedControlStyleBar;
        //ctrl.momentary = YES; 
        ctrl.tintColor  = [UIColor darkGrayColor];
        UIImage *theImage = [UIImage imageNamed:@"highlight_country.png"];

        [ctrl setImage:theImage forSegmentAtIndex:0];

        [container.navigationBar addSubview:ctrl];
        [ctrl release];
        //
        //create a popover controller
        self.popoverController = [[[UIPopoverController alloc]
                                   initWithContentViewController:container] autorelease];
        [container  release];
        [popoverController setPopoverContentSize:CGSizeMake(500, 600)];
        //present the popover view non-modal with a
        //refrence to the button pressed within the current view
        [popoverController presentPopoverFromRect:CGRectMake(popoverArrowPossition, 0.0, 0.0, 52.0) inView:super.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];
        [controller release];
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-26 23:47:32

使用UIPopoverController非常困难,但我通过执行以下操作解决了这个问题:将Popover Controller的委派设置为self (popoverController.delegate = self)并将UIPopoverControllerDelegate协议添加到您的类头

接下来,我实现了- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController委托方法,在这里我释放了popoverController并将其设置为nil。

代码语言:javascript
复制
- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController {
    [self.popoverController release];
    self.popoverController = nil;
}

请注意:如果您通过代码(即使用dismissPopoverAnimated)关闭弹出窗口,则不会调用此委托方法,只有当此用户通过在弹出窗口外点击来取消弹出窗口时才会调用它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7207067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档