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
在不再需要时管理这些视图控制器的释放