ios - UiViewController - 弹出不弹出

标签 ios uiviewcontroller

当从另一个 UIViewController 按下按钮时,我正在显示 UIControllerView 子类,如下所示:

- (IBAction)openNextLevelViewController
{
    NSLog(@"openNextlevelViewController");

    [self.navigationController pushViewController:nextLevelViewController animated:YES];

}

应用程序将在按下触发此方法的按钮时从该 View 返回:

-(IBAction) returnToStart {

    NSLog(@"returnToStart method called");
    [self.navigationController popViewControllerAnimated:YES];

}

问题是显示的 View 没有在弹出时被销毁/释放。因此,当它被推送时,它不会执行启动一些变量的 viewDidLoad。这可能会导致相关问题,即第二次通过时,当用户按下返回按钮时,“弹出”不再导致返回到前一个 Controller 。

处理此问题的最佳方法是什么?我可以将初始化代码移至“willAppear”方法,但似乎几乎可以随机调用它。

最佳答案

嗯,它没有被释放,因为 nextLevelViewController 仍然保留在其他地方。很可能在您的 nextLevelViewController 变量中。

- (IBAction)openNextLevelViewController
{
    NSLog(@"openNextlevelViewController");
    // assuming you have nib already set up
    UIViewController *nextLevelViewController = [[NextLevelViewController alloc] init]; 
    // RETAIN COUNT = 1

    // navigationController retains your controller
    [self.navigationController pushViewController:nextLevelViewController animated:YES]; 
    // RETAIN COUNT = 2

    // Don't need it any more let navigation controller handle it.
    [nextLevelViewController release]
    // RETAIN COUNT = 1 (by NavigationController)
}

进一步

-(IBAction) returnToStart {
    [self.navigationController popViewControllerAnimated:YES];
    // RETAIN COUNT = 0, dealloc will be called on your viewController, make sure to release all your retained objects.
}

现在,当您的 Controller 弹出时,它应该被释放(不应该保留在其他任何地方)。下次你调用 openNExtLevelViewController 时,它会初始化你的 viewController 的一个新实例。

我喜欢在不再需要(显示)时释放 viewController,而不是将其保存在内存中。尽可能让 navigationController 和 TabBarController 处理 viewController。

关于ios - UiViewController - 弹出不弹出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7522615/

相关文章:

ios - 单例潜在泄漏?

ios - 如何旋转从照片库中挑选的照片进行编辑

iphone - 在 Iphone +[UIActivityIndi​​catorView _loadResourcesForStyle :]? 中显示泄漏

iOS:如何重用从 Nib 构建的 UIView?

objective-c - 模态视图 Controller 问题和 definesPresentationContext

ios - 如何恢复消耗品In App Purchases?

ios - 以不同于父 View 的方式定位 subview

ios - 如何通过单击不同的单元格将数据从一个 uitableview 传递到多个 Controller

ios - 带顶栏的 3D Touch Peek

ios - Xcode Swift 计算 23 个文本字段值的平均值