1

我需要释放我在 navigationViewController 上的 mainViewController 视图,以避免收到我收到的内存警告。

加载视图的好习惯是在“loadview”方法中,但是当我尝试解除视图(当我转到堆栈的下一个控制器时)执行“self.view = nil”时,它再次调用“loadview”方法所以什么也没有发生。

我解决了在“viewWillAppear”方法中加载视图的问题,但是,我的问题是:

那个程序正确吗?如果不是(这就是我的想法),我该如何释放该视图以释放其内存?

哪种方法最好(或更正确)?

这是代码:

'loadView' 不加载视图

- (void)loadView
{
    [super loadView];
    (some more code)
}

它在这里加载的视图

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    if (!pral)
    {
        pral = [[TouchDrawView alloc] initWithFrame:[UIScreen mainScreen].bounds];
           [self setView:pral];
           [pral release];
    }
        (some more code)
}

这是对堆栈的下一个 viewController 的调用

- (void)menus:(id)sender
{
    opcions *ops = [[opcions alloc] init];
    [[self navigationController] pushViewController:ops animated:YES];
    [ops release];

//Here I'm trying to free memory releasing the view
    [pral removeFromSuperview];
    pral = nil;
    self.view = nil;
}

谢谢

4

2 回答 2

0

您不必卸载视图,因为它会自动卸载。你只需要在 ViewdidUnload 方法中释放那些包含内存的对象。

于 2012-04-14T16:40:32.923 回答
0

构建自定义子视图的一个更好的钩子是 viewDidLoad。

最低限度,您应该在 didReceiveMemoryWarning 和 dealloc 中释放保留的子视图(ARC 之前)。

推送到新的 viewController 时无需释放。你的旧的还在那里,在下面。

于 2012-04-14T16:41:11.690 回答