• UIViewController内存管理


     iOS开发UIViewController内存管理是本文要介绍的内容,在 iOS 3.0 后,UIViewController 多了一个叫做 viewDidUnLoad 的方法。不少人都不清楚这个方法的具体意义,苹果的文档也就一句 ”Called when the controller’s view is released from memory” 简单的解释了下,并要求你把 IBOutlet 绑定的视图给清空,为什么呢?

      先看下 UIViewController 从创建 view 到展示的流程的几个函数

      -initWithNibName:bundle:

      这两个方法都是初始化一个 vc,但请注意 view 不是这时候载入的

      -loadView

      -viewDidLoad

      当一个视图准备展现时,vc 首先会判断 view 是否已经创建否则便通过之前指定的 xib 文件来初始化 view,以及绑定其他关系(若没有指定 xib 文件,则默认会搜索和 vc 同名的 xib,比如 myNameViewController 就会搜索 myNameViewController.xib 文件)

      若是没有 xib 文件,你就可以在 loadview 中自己手动创建这个 viewControoler 需要的视图。接下来就是调用到 -viewDidLoad,许多人喜欢在这里做些其他事情,比如做个 http 请求、建立个数组啥的。这里若不处理正确,-viewDidUnload 激活时内存就容易泄露了,稍后提到。

      -view()appear

      -view()disappear

      这几个方法就不解释了

      -viewDidUnload

      该方法在收到内存警告,同时该视图并不在当前界面显示时候会被调用,此时该 controller 的 view 已经被释放并赋值为 nil。

      接下来你要做的是把实例变量的子视图释放(IBOulet 的,以及自己添加的) 其他实例变量,比如之前在 -viewDidLoaded 中实例的数据数组、http 请求释放掉

      因为当该 viewController 再次被激活准备显示时(比如 navigationControler 返回到上一级),vc 发现自己的 view 为空后会重复之前的流程直到把 view 给创建起来。若没将自己额外添加的子视图、各种实例变量释放,这里便会重新再次创建,于是,内存泄露了。

    转:http://blog.csdn.net/weiqubo/article/details/7376185
  • 相关阅读:
    SQL 语法解释器jsqlparser
    《JAVA与模式》之解释器模式
    程序猿应该了解的内容以及程序猿如何强迫自己学习(思考篇)
    强迫自己学习(心态篇),国庆,你准备去哪疯?
    强迫自己学习(实践篇),以及关于写博客的几点建议
    JAVA GC垃圾收集器的分析
    JVM内存模型及内存分配过程
    Extended Traffic LightOJ
    HDU 4616 Game 树形DP
    POJ 3164 Command Network
  • 原文地址:https://www.cnblogs.com/ygm900/p/3118953.html
Copyright © 2020-2023  润新知