iOS开发 UIViewController内存管理

移动开发 iOS
本文介绍的是iOS开发 UIViewController内存管理,在 iOS 3.0 后,UIViewController 多了一个叫做 viewDidUnLoad 的方法,我们先来看内容。

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

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

  1. -init  
  2. -initWithNibName:bundle: 

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

  1. -loadView  
  2. -viewDidLoad 

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

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

  1. -view()appear  
  2.  -view()disappear 

这几个方法就不解释了

  1. -viewDidUnload 

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

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

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

于是,内存泄露了。

小结:详解UIViewController 内存管理的内容介绍完了,希望本文对你有所帮助。

转自 http://ixhan.com/2011/02/uiviewcontroller-memory-manage/

责任编辑:zhaolei 来源: Cocoa China
相关推荐

2017-03-07 10:15:35

iOS内存管理开发

2018-07-23 09:26:08

iOS内存优化

2011-08-22 11:07:16

IOS 开发多核内存

2016-04-11 09:30:49

内存管理ios开发

2017-02-09 21:24:22

iOS内存管理

2011-09-01 10:42:14

Objective-CCocoa内存管理

2015-03-13 09:30:23

iOS内存管理

2012-01-18 14:14:29

iOS教程iOS5

2011-08-02 10:50:56

iOS开发 内存缓存

2012-02-01 13:57:40

内存缓存机制

2013-12-17 15:46:04

iOS开发iOS 内存泄漏

2015-06-25 09:47:20

iOS内存管理

2011-08-17 16:23:31

iPhone开发UIViewContr

2014-07-31 10:48:09

Android内存管理OOM

2014-03-12 09:37:22

内存管理autoreleaseautorelease

2011-07-21 17:40:43

iOS 多核 内存

2011-08-05 16:41:48

iOS 队列 内存

2016-03-03 10:07:39

ios内存管理面试总结

2011-07-26 15:14:24

苹果 Cocoa 内存

2017-06-30 15:58:07

Android开发内存
点赞
收藏

51CTO技术栈公众号