首页 > 代码库 > UIViewController中view的释放过程

UIViewController中view的释放过程

第一、viewDidUnload方法

1.调用时机:

内存吃紧时,在iPhone OS 3.0之前didReceiveMemoryWarning是释放无用内存的唯一方式,但是OS 3.0及以后viewDidUnload方法是更好的方。当系统内存吃紧的时候会调用该方法,释放view,释放的view必须是已经在内存的view,即通过viewdidload之后的view,而不是controller,在iphone应用程序,可以controller已经创建,但是view可以没有进内存,另外该方法不会是viewController release。

注意此时释放的对象应该是所有IBOutlet(无论是property还是实例变量)置为nil,在该方法中释放其他与view有关的对象、其他在运行时创建(但非系统必须)的对象、在viewDidLoad中被创建的对象、缓存数据等release对象后,将对象置为nil

注意:系统view时已经将其release掉了, 即self.view此时已经为空)

2.释放的对象

viewDidUnload中被release的对象必须是很容易被重新创建的对象(比如在viewDidLoad或其他方法中创建的对象),不要release用户数据或其他很难被重新创建的对象。

viewDidUnload 不会引发dealloc方法

第二.viewDidUnload工作内容

1、释放掉一些比较容易创建的对象,或者是一些比较占资源的对象(图片、音频等)
2、如果界面控件自己保持了引用计数,这里也要释放掉。(比如说,这个控件被设成了属性,而且是retain的,这个retain的引用计数就必须释放掉)
3、如果跨类的参数传递机制会在viewDidUnload以后产生不正常的效果,这里也必须处理。

第三 .viewDidUnload 和viewDidload的关系

一般认为viewDidUnload是viewDidLoad的镜像,因为当view被重新请求时,viewDidLoad还会重新被执行,viewDidLoad总是在loadView之后调用,不管你是不是通过nib文件创建的,这个方法总是会被调用的。

第四。viewDidUnload和dealloc

viewDidUnload和dealloc方法没有关联,viewDidUnload 不会引发dealloc方法

他们的触发原因不同,viewDieUnload是因为内存不够导致,dealloc是因为对象引用计数为零自动调用。

流程:

(loadView/nib文件)来加载view到内存 ——>viewDidLoad函数进一步初始化这些view ——>内存不足时,调用viewDidUnload函数释放views —->当需要使用view时有回到第一步,如此循环。

第四.viewWillAppear: 方法


Called when the view is about to made visible. Default does nothing
视图即将可见时调用。默认情况下不执行任何操作
第五.viewDidAppear:
Called when the view has been fully transitioned onto the screen. Default does nothing
视图已完全过渡到屏幕上时调用
第六 viewWillDisappear:
Called when the view is dismissed, covered or otherwise hidden. Default does nothing
视图被驳回时调用,覆盖或以其他方式隐藏。默认情况下不执行任何操作
第七、viewDidDisappear:
Called after the view was dismissed, covered or otherwise hidden. Default does nothing
视图被驳回后调用,覆盖或以其他方式隐藏。默认情况下不执行任何操作