iOS何时分配内存和释放内存?(关于导航和选项卡控制器的默认行为)
我刚开始为iOS开发。我已经看过很多关于以编程方式控制内存管理的文档,但是我对iOS在以下两者之间导航时处理内存的默认方式感到好奇:iOS何时分配内存和释放内存?(关于导航和选项卡控制器的默认行为),ios,memory,tabs,navigation,master-detail,Ios,Memory,Tabs,Navigation,Master Detail,我刚开始为iOS开发。我已经看过很多关于以编程方式控制内存管理的文档,但是我对iOS在以下两者之间导航时处理内存的默认方式感到好奇: 标签 主详图视图 带有选项卡的主详图视图 (注意:当我说主详细视图时,我基本上是指导航控制器。我只是称之为“主详细视图”,以定义导航控制器层次结构的两个不同级别,因此我们更容易讨论) 我将用我的问题逐一介绍这3个主题: 选项卡 当应用程序首次启动时,它是将每个选项卡的所有数据加载到RAM中,还是只加载最初显示的选项卡的数据 如果1的答案是否:无论何时从一个选项
- 标签
- 主详图视图
- 带有选项卡的主详图视图
viewdiload
和dealloc
方法中,您将作为控制器收到通知并加载和解除分配:
NSLog(@"%s", __FUNCTION__);
然后,通过在实例化和释放视图控制器时进行日志记录的视图控制器,您可以在容器控制器(选项卡栏控制器、导航控制器、拆分视图控制器等)的任意组合中使用这些控制器,并且您可以很容易地看到发生了什么- 选项卡栏控制器:在故事板中,选项卡栏控制器在您选择其各自选项卡(而不是之前)时分配子控制器,但保留旧选项卡。(在NIBs中,这取决于您以编程方式执行的操作;您可以预加载它们,也可以不预加载它们。)
- 导航控制器:导航控制器在推送到特定场景时加载新的子控制器,但在该过程中不会释放以前的视图控制器。只有当从导航堆栈中弹出视图控制器时,该控制器才会被释放
- 分割视图控制器:在分割视图控制器中执行替换序列时,它将实例化新的子场景,并释放以前的子控制器。如果之前的子控制器本身是一个容器控制器,比如选项卡或导航控制器,那么它的子控制器也将被释放
如果你真的想知道,就用仪器来观察记忆。您可以确切地看到什么时候分配了内容,什么时候修改了保留计数,以及修改了什么。通常我不在乎,除非我的应用在开发过程中收到内存警告,或者我怀疑有泄漏(ARC有时也会发生)。顺便说一句,如果你不是,你应该使用ARC