Iphone UIViewController视图->;将显示loadView与ViewView

Iphone UIViewController视图->;将显示loadView与ViewView,iphone,ios,Iphone,Ios,我需要释放navigationViewController上的mainViewController视图,以避免收到内存警告 加载视图的良好实践是在“loadview”方法中,但是当我尝试解除锁定视图(当我转到堆栈的下一个控制器时)执行“self.view=nil”时,它会再次调用“loadview”方法,因此不会发生任何事情 我解决了在“viewWillAppear”方法中加载视图的问题,但是,我的问题是: 这个程序正确吗? 如果不是(我就是这么想的),我如何释放该视图以释放其内存 哪种方法最好

我需要释放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;
}

谢谢

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

构建自定义子视图的更好挂钩是viewDidLoad

至少,您应该在didReceiveMemoryWarning和dealloc中释放保留的子视图(预弧)


按下新的viewController时无需释放。您的旧视图仍在下面。

是的,但我认为不会调用ViewDidUnload(在简单的naviagationController应用程序中),除非由于内存警告而卸载视图。我试图避免这种情况。是的,我的旧版本在那里,但它的视图也没有必要在那里消耗内存资源,不是吗?(它不在屏幕上)。所以,如果我理解得很好,在收到内存警告时什么也不做并“做出反应”是一种好的做法吗?收到内存警告(这将触发viewDidUnload)是可以的,因为在收到该警告之前,您没有内存问题,因此无需处理东西。如果你在不需要的时候处理东西,你可能会产生其他问题,比如需要重新加载(=延迟),或者更糟,丢失更难重新加载的信息(可能来自其父VC)。@SomaMan,是的,这是有道理的。谢谢你这么快的回复。