【问题标题】:dismiss viewcontroller before segue在 segue 之前关闭视图控制器
【发布时间】:2014-07-14 17:49:03
【问题描述】:

我需要按关卡设计游戏,在每个关卡中,只能从每个关卡向前或向后。没有必要回到之前的水平。 就是这样的场景:

菜单->级别 1 -> 级别 2 -> ...... 级别 9 -> 级别 10

所以我扩展了 UIViewController 类并将它分配给情节提要中的 10 个对象。当某些条件(无论哪种情况)发生时,我需要传递到下一个级别,丢弃当前级别的内存,这不再需要。 最好的方法是什么? 请尽快回复,谢谢

【问题讨论】:

    标签: ios objective-c xcode uiviewcontroller storyboard


    【解决方案1】:

    如果您希望能够从 VC1(home)-->VC2-->VC3 顺序向前移动,但总是向后跳到 VC1(home),请使用展开转场。这使您可以完全按照自己的意愿行事,并提供进一步跳回任何先前 VC 的能力。顺便说一句,unwind 会为您处理内存问题。这真的很容易实现,我建议看看这篇优秀的帖子:

    What are Unwind Segues for and How to Use Them

    【讨论】:

    • 我可以使用 unwind segue 跳回上一级。相反,我需要清除当前视图控制器占用的内存并通过 segue 到一个新的视图控制器(据我了解,这将是我正在解雇的视图控制器的儿子!)例如,如果我'm 在级别 9,不处理内存,级别 1-2-3-4-5-6-7-8-9 将加载到内存中。考虑到不再需要从 1 到 8 的级别,这是浪费内存。
    • ARC 会为您解决这个问题(假设您使用的不是 4.2 之前的 ios 版本)。一旦 VC 被弹出,分配的对象和由这些 VC 的引用计数保留的内存就会被丢弃,从而允许内存被回收。这就是为什么您不能/不能调用 dealloc,或者使用 ARC 实现或调用 retain、release、retainCount 或 autorelease。查看developer.apple.com/library/ios/releasenotes/objectivec/…
    【解决方案2】:

    shouldPerformSequeWithIdentifierprepareSegue 之前调用。所以你可以在这里做你的逻辑来防止实际的转场。只需返回 false 并执行您需要的操作。

    - (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender{
        if ([identifier isEqualToString:@"mySegue"]) {
            // Do what you need here
            [self.navigationController popToRootViewControllerAnimated:YES];
            return FALSE;
        }
    
        return TRUE;
    }
    

    【讨论】:

    • 我应该使用什么指令来删除源视图控制器并传递给目标视图控制器?请尽快回复,谢谢
    • 我认为您正在寻找popToRootViewControllerAnimated - 请参阅上面的编辑。
    • 我创建了一个由 NavigationViewController 控制的 ViewControllers 链,该 NavigationViewController 由个性化的 segues 连接。每个 ViewController 完成后,都会以编程方式执行个性化的 segue: (void)perform{ UINavigationController *nav = [[self sourceViewController] navigationController]; UIViewController *destController = self.destinationViewController; [导航popViewControllerAnimated:否]; [导航 pushViewController:destController 动画:YES]; }。当它被点击时,主页按钮被称为 popToRootViewControllerAnimated。两种情况下内存都清理干净了吗?
    • 我相信是的,但我建议使用 xCode Instruments 来观察你的记忆并确保。 Here is a link 如果您不熟悉乐器,可能会有所帮助。
    • 用于连接关卡的个性化segue是否可以有相同的标识符,考虑到我每次都必须重复相同的操作?
    猜你喜欢
    • 2020-02-17
    • 2017-09-08
    • 2012-05-14
    • 1970-01-01
    • 2016-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多