在 iOS 上,presentViewController 会导致溢出(如堆栈溢出)吗?

Posted

技术标签:

【中文标题】在 iOS 上,presentViewController 会导致溢出(如堆栈溢出)吗?【英文标题】:On iOS, can presentViewController cause an overflow (like a stack overflow)? 【发布时间】:2012-09-26 09:43:40 【问题描述】:

由于我们可以调用presentViewControllerdismissViewControllerAnimated(即dismissViewController,首先指定动画),它看起来像一个堆栈结构,我们可以呈现3次,关闭3次,就像一个链“呈现”视图控制器作为头部,一个“呈现”视图控制器,它实际上是另一个“呈现”视图控制器本身。

如果是这种情况,它是否真的会在 N 次之后溢出——如果我们继续在新视图控制器中调用 presentViewController 但从不关闭。文档似乎没有警告存在这种可能性。

【问题讨论】:

我觉得它就像一个链表,所以没有固定的限制。你可能首先会耗尽内存。 对了,为什么栈溢出这么快?如果每个线程都可以访问4GB,理论上不是可以轻松拥有数千级或更多的堆栈吗? ios 上,没有线程会有 4GB 堆栈......也许是 iPhone 15。 哦,我的意思是一般来说,就像在 iMac 上... 对了,不是视图控制器和视图重物吗?我有一个应用程序不断呈现新的视图控制器,但在第 10 次之后,仪器中显示的总分配字节只有 7.56 MB...我再做 6 次,它是 11MB...所以也许不是继续展示是个好主意,因为它可能会在一定程度上耗尽内存……我们说的是旧 iOS 设备上的 25MB 和新设备上的 50MB? 【参考方案1】:

实际上,没有。编写一个无限的presentViewController 测试用例,看看会发生什么。很可能你会达到内存限制。如果这不是一个纯粹的理论问题,并且您正在考虑以这种方式编写界面,那么不要,寻找另一种方法。

【讨论】:

以上是关于在 iOS 上,presentViewController 会导致溢出(如堆栈溢出)吗?的主要内容,如果未能解决你的问题,请参考以下文章

创建 GIF 在 iOS 7 上工作,在 iOS 8 上中断

NSFetchRequest 控制器在 iOS 5 上工作,在 iOS 4.3 上崩溃

NSLayoutConstraints 在 ios 7 上崩溃,但在 ios 8 上没有

在 iOS 8 上按钮大小不正确,在 iOS 7 上正确

为啥这个 UITabBarItem 图像切换代码在 iOS 7 上有效,而在 iOS 7.1 上无效?

UIImagePickerController 在 iOS 设备上工作但不在 iOS 模拟器上工作?