Iphone 推送新控制器时,pushViewController是否应释放旧控制器?

Iphone 推送新控制器时,pushViewController是否应释放旧控制器?,iphone,objective-c,ios,ipad,ios4,Iphone,Objective C,Ios,Ipad,Ios4,据我所知,当推送新的viewController时,是否应释放旧的viewController 在这里,我只是创建了两个不同的viewControllers,并推送它们 UINavigationController *navController = [[UINavigationController alloc] init]; [self.window addSubview:navController.view]; smallLayout = [[SmallViewCon

据我所知,当推送新的
viewController
时,是否应释放旧的
viewController

在这里,我只是创建了两个不同的
viewControllers
,并推送它们

    UINavigationController *navController = [[UINavigationController alloc] init];
    [self.window addSubview:navController.view];

    smallLayout = [[SmallViewController alloc] init];
    [navController pushViewController:smallLayout animated: NO];
    [smallLayout release];

    largeLayout = [[LargeViewController alloc] init];
    [navController pushViewController:largeLayout animated: NO];
    [largeLayout release];
SmallViewController
dealloc从未被调用,当我检查retaincount时,它仍然是1。我在运行循环结束后很久才检查retain count,我也知道retain count不是您应该信任的东西。

不,它不应该

导航控制器维护推送到它上面的所有视图控制器的导航堆栈。。。因此,当返回或弹出当前视图控制器时,上一个控制器仍然存在

导航控制器将在弹出视图控制器后释放视图控制器。

不,它不应该

导航控制器维护推送到它上面的所有视图控制器的导航堆栈。。。因此,当返回或弹出当前视图控制器时,上一个控制器仍然存在


弹出视图控制器后,导航控制器将释放视图控制器。

将新控制器推到导航堆栈上时,视图控制器不会释放。导航控制器将保持按住它们,以便在您将当前控制器弹出时显示正确的项目。如果它正在释放它,那么导航控制器就没有任何东西可以返回了


如果您希望尝试优化内存,请实现-(void)viewDidUnload。每当卸载控制器的视图时,就会调用它,这可能发生在推送新控制器时。我说可能会发生,因为它是在内存不足的情况下调用的。因此,如果你有足够的空闲内存,它就不会被调用。在模拟器中,您可以通过模拟内存警告来强制它。确保您在其中销毁的任何内容都可以在-viewDidLoad中重新创建。

将新控制器推到导航堆栈上时,视图控制器不会被释放。导航控制器将保持按住它们,以便在您将当前控制器弹出时显示正确的项目。如果它正在释放它,那么导航控制器就没有任何东西可以返回了


如果您希望尝试优化内存,请实现-(void)viewDidUnload。每当卸载控制器的视图时,就会调用它,这可能发生在推送新控制器时。我说可能会发生,因为它是在内存不足的情况下调用的。因此,如果你有足够的空闲内存,它就不会被调用。在模拟器中,您可以通过模拟内存警告来强制它。确保您在其中销毁的任何内容都可以在-viewDidLoad中重新创建。

分配一次,释放一次。您已经在代码中完成了这项工作。看来你的代码还不错。此处不会调用smallLayout的
dealloc
,因为
UINavigationController
将所有ViewController的堆栈推入其中,从而保留它
UINavigationController
在不再需要时管理这些视图控制器的释放。

分配一次,释放一次。您已经在代码中完成了这项工作。看来你的代码还不错。此处不会调用smallLayout的
dealloc
,因为
UINavigationController
将所有ViewController的堆栈推入其中,从而保留它
UINavigationController
在不再需要时管理这些视图控制器的释放