zoukankan      html  css  js  c++  java
  • 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 给创建起来。若没将自己额外添加的子视图、各种实例变量释放,这里便会重新再次创建,于是,内存泄露了。

  • 相关阅读:
    ubuntu下安装maven
    159.Longest Substring with At Most Two Distinct Characters
    156.Binary Tree Upside Down
    155.Min Stack
    154.Find Minimum in Rotated Sorted Array II
    153.Find Minimum in Rotated Sorted Array
    152.Maximum Product Subarray
    151.Reverse Words in a String
    150.Evaluate Reverse Polish Notation
    149.Max Points on a Line
  • 原文地址:https://www.cnblogs.com/BinShao/p/3561280.html
Copyright © 2011-2022 走看看