IOS开发中 切换视图或控制器父级内存会自动释放吗?
一直搞不懂内存是打开一个视图,这时依然保留上一级视图内存,还是打开一个视图,这时释放掉父级占用内存掉?有点困惑,想请教一下大家,我总是发现我的应用随着用过的切换越来越多,...
一直搞不懂内存是打开一个视图,这时依然保留上一级视图内存,还是打开一个视图,这时释放掉父级占用内存掉?有点困惑,想请教一下大家,我总是发现我的应用随着用过的切换越来越多,所占的内存也是越来越多。
比如我有个TabBarController,默认第一个item是firstNavigation,而firstNavigation默认视图是A视图,
问题1:我从A视图push切换到B视图之后,那上一级(A视图)内存是保留还是释放掉了?
问题2:我从B试图pop 返回到A视图,那B视图占用内存是不是释放掉了?
问题3:如果B试图切换到TabBarController的第2个标签secondNav的默认C视图,那firstNavigation还有A、B视图占用内存是不是也是释放掉了? 展开
比如我有个TabBarController,默认第一个item是firstNavigation,而firstNavigation默认视图是A视图,
问题1:我从A视图push切换到B视图之后,那上一级(A视图)内存是保留还是释放掉了?
问题2:我从B试图pop 返回到A视图,那B视图占用内存是不是释放掉了?
问题3:如果B试图切换到TabBarController的第2个标签secondNav的默认C视图,那firstNavigation还有A、B视图占用内存是不是也是释放掉了? 展开
1个回答
展开全部
是否释放内存不在于视图是否可见
问题1:A视图目前作为B的父视图依旧存在于内存,任何情况下,父Containner都不会在子Item存在的时候释放
问题2:B pop 返回A后,B是否释放要看之后的代码是否再次使用了B,如果后面的代码还使用到了B,则B所占的内存一直保留,有一种情况例外,在内存极度不足的情况下,IOS会遵从一定的策略有可能把B释放,B再次被使用的时候再重新创建
另外,即使pop后后面的代码不再使用B了,那么B的内存只是有可能被释放,释放的时机并不一定,这取决于垃圾回收器的回收策略
问题3:TabBarController的内存控制策略是这样的,最开始TabBarController被显示的时候,显示程序指定的某个Tab,其他Tab如果没有在初始化代码里被引用过的话是不会占用内存,当Tab切换的时候,如果切换到的新Tab被初始化过,则此时直接显示内存里的内容,如果新Tab没有被初始化过,则此时才开始创建新Tab,而老Tab就留在内存了,各Tab的回收动作在TabBarController被回收时启动,当然,TabBarController何时被回收,跟问题1,问题2类似
问题1:A视图目前作为B的父视图依旧存在于内存,任何情况下,父Containner都不会在子Item存在的时候释放
问题2:B pop 返回A后,B是否释放要看之后的代码是否再次使用了B,如果后面的代码还使用到了B,则B所占的内存一直保留,有一种情况例外,在内存极度不足的情况下,IOS会遵从一定的策略有可能把B释放,B再次被使用的时候再重新创建
另外,即使pop后后面的代码不再使用B了,那么B的内存只是有可能被释放,释放的时机并不一定,这取决于垃圾回收器的回收策略
问题3:TabBarController的内存控制策略是这样的,最开始TabBarController被显示的时候,显示程序指定的某个Tab,其他Tab如果没有在初始化代码里被引用过的话是不会占用内存,当Tab切换的时候,如果切换到的新Tab被初始化过,则此时直接显示内存里的内容,如果新Tab没有被初始化过,则此时才开始创建新Tab,而老Tab就留在内存了,各Tab的回收动作在TabBarController被回收时启动,当然,TabBarController何时被回收,跟问题1,问题2类似
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询