前一个视图控制器的ios模式正在产生内存问题
我有一个非常糟糕的视图系统。我浏览了几个模态视图,然后想跳回我的原始视图(循环回自身)。唯一的问题是,它一直在其他视图之上分配新视图,直到我的内存用完,应用程序崩溃。我如何告诉我的应用程序我再也不会回到预览视图控制器,它应该释放内存块?我想这样做: self.presentingViewController=nil; 但是它是只读的,我越想它就越不能像那样工作。 这是我的故事板。前一个视图控制器的ios模式正在产生内存问题,ios,memory-leaks,uistoryboardsegue,Ios,Memory Leaks,Uistoryboardsegue,我有一个非常糟糕的视图系统。我浏览了几个模态视图,然后想跳回我的原始视图(循环回自身)。唯一的问题是,它一直在其他视图之上分配新视图,直到我的内存用完,应用程序崩溃。我如何告诉我的应用程序我再也不会回到预览视图控制器,它应该释放内存块?我想这样做: self.presentingViewController=nil; 但是它是只读的,我越想它就越不能像那样工作。 这是我的故事板。 现在还不完全清楚您正在做什么,以及为什么它不能像您期望的那样工作,但我认为以下方法应该适合您: 我从“根表视图”开始
现在还不完全清楚您正在做什么,以及为什么它不能像您期望的那样工作,但我认为以下方法应该适合您:
–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,尽管我也会首先寻找他们在哪里得到了超越。根据它们被过度保留的原因,在完成块中将它们置零是可以的,或者您可能会找到更好的解决方案。这是真的。。。好吧,没关系,最好的办法是找到是什么让他们过度。。。