Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/103.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
前一个视图控制器的ios模式正在产生内存问题_Ios_Memory Leaks_Uistoryboardsegue - Fatal编程技术网

前一个视图控制器的ios模式正在产生内存问题

前一个视图控制器的ios模式正在产生内存问题,ios,memory-leaks,uistoryboardsegue,Ios,Memory Leaks,Uistoryboardsegue,我有一个非常糟糕的视图系统。我浏览了几个模态视图,然后想跳回我的原始视图(循环回自身)。唯一的问题是,它一直在其他视图之上分配新视图,直到我的内存用完,应用程序崩溃。我如何告诉我的应用程序我再也不会回到预览视图控制器,它应该释放内存块?我想这样做: self.presentingViewController=nil; 但是它是只读的,我越想它就越不能像那样工作。 这是我的故事板。 现在还不完全清楚您正在做什么,以及为什么它不能像您期望的那样工作,但我认为以下方法应该适合您: 我从“根表视图”开始

我有一个非常糟糕的视图系统。我浏览了几个模态视图,然后想跳回我的原始视图(循环回自身)。唯一的问题是,它一直在其他视图之上分配新视图,直到我的内存用完,应用程序崩溃。我如何告诉我的应用程序我再也不会回到预览视图控制器,它应该释放内存块?我想这样做: self.presentingViewController=nil; 但是它是只读的,我越想它就越不能像那样工作。 这是我的故事板。

现在还不完全清楚您正在做什么,以及为什么它不能像您期望的那样工作,但我认为以下方法应该适合您:

  • 我从“根表视图”开始,然后进行模态分析

  • *然后从带有“placehold”文本的视图I模态到游戏控制器

  • 然后我想回到navcontroller/根表视图

  • 我假设你在做1。和2使用
    –presentViewController:animated:completion:
    (或现在已弃用的
    –presentModalViewController:animated:

    要执行第3步,您必须呼叫:

    [self.presentingController dismissViewControllerAnimated:ZZZ completion:nil]

    这将从根表视图关闭所有模态视图控制器,直到您要关闭的模态视图控制器

    如果您已经这样做了,但它没有按照您想要的方式工作,我认为这可能是因为您正在取消模态视图控制器,并在相同的运行循环周期内呈现一个新的。要解决此问题,只需在根控制器中定义一个方法,例如:

        - (void)presentFirstViewController {
            [self presentViewController:xxxxx animated:YES completion:nil];
        }
    
    稍后,您将关闭模态控制器,执行以下操作:

    self.presenting.Controller dismissViewControllerAnimated:YES completion:nil];
    
    并展示新的一个:

    [rootController performSelector:@selector(presentFirstViewController) withObject:nil afterDelay:0.0];
    
    最后一步将为运行循环提供一些时间,以便在解除时清理问题,并依次呈现模态控制器


    希望这能有所帮助。

    你说的“想跳回我的原始视图(自身循环)”是什么意思?为什么在原始视图的顶部取消模式视图不起作用?因此,我从“根表视图”开始,然后对“好友选取器控制器”下面的导航控制器进行模式设置。然后从带有“placehold”文本的视图开始,对游戏控制器进行模式设置。然后我想回到左边的navcontroller/root表视图,然后再做一次。这就像我一直在往堆栈上推东西,却从来没有清理过一样。塞吉奥,这就是我最后做的,效果很好,我不必执行performSelector的把戏。然而,游戏控制器并没有从内存中释放,我不明白为什么。当我运行Instruments/leaks并检查“游戏控制器”几次时,我可以看到旧游戏控制器从未从内存中清除。我可以强迫他们在完成块中释放吗?你可以尝试在完成块中为他们分配nil,尽管我也会首先寻找他们在哪里得到了超越。根据它们被过度保留的原因,在完成块中将它们置零是可以的,或者您可能会找到更好的解决方案。这是真的。。。好吧,没关系,最好的办法是找到是什么让他们过度。。。