iOS开发笔记之六——视图的生命周期

        视图是应用的一个重要组成,而视图控制器控制着视图,其重要性在整个应用中不言而喻。本文章将对视图的克制对象的生命周期执行的方法进行介绍;

1、视图创建方法init和loadView:

       如果在初始化UIViewController指定了xib文件名,就会根据传入的xib文件名加载对应的xib文件,例如:

[[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];  对应到视图类会执行方法:

 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;

如果没有明显地传xib文件名,就会加载跟UIViewController同名的xib文件,例如:

[[MyViewController alloc] init]; // 加载MJViewController.xib  

如果没有找到相关联的xib文件,就会创建一个空白的UIView,然后赋值给UIViewController的view属性,大致如下:

self.view = [[[UIView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame] autorelease];

手动创建界面时才需要重写loadView,其它时候初始化操作在viewDidLoad里做就好了;

如果想通过代码来创建UIViewController的view,就要重写loadView方法,并且不需要调用[super loadView],因为上面已经提到:若没有xib文件,[super loadView]默认会创建一个空白的UIView。我们既然要通过代码来自定义UIView,那么就没必要事先创建一个空白的UIView,以节省不必要的开销。正确的做法应该是这样:

- (void)loadView {
     self.view = [[[UIWebView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame] autorelease];
}

此时不需要调用[super loadView],会造成了一些不必要的开销,你调用了也不会出错

总结一句话,苹果设计这个方法就是给我们自定义UIViewController的view用的

viewDidLoad:

      在视图控制器已经被实例化,视图被加载到内存中时调用viewDidLoad方法,这时候视图并未出现。该方法通常进行的是对所控制的视图进行初始化处理。PS:不管你是通过xib文件还是重写loadView创建UIViewController的view,在view创建完毕后,最终都会调用viewDidLoad方法。viewDidLoad在应用时只调用一次。

2、视图可见方法:viewWillAppear:、viewDidAppear:、viewWillDisappear:、viewDidDisappear

      视图可见前后会调用viewWillAppear:方法和viewDidAppear:方法;视图不可见前后会调用viewWillDisappear:方法和viewDidDisappear:方法;4个方法调用父类相应的方法以实现其功能,编码时该方法的 位置可根据实际情况进行调整;这4个方法可以被反复多次进行调用;

3、系统低内存:

didReceiveMemoryWarning:和

viewDidUnLoad:方法

在低内存情况下,IOS会调用didReceiveMemoryWarning:和viewDidUnload:方法,didReceiveMemoryWarning:方法的主要职能是释放内存,包括视图控制器中的一些成员变量和视图的释放:例如:

-(void) 

didReceiveMemoryWarning

{

self.myButton = nil;

        self.myLabel = nil;

[super didReceiveMemoryWarning];

}

viewDidUnload 就是当 view 被卸载以后执行的语句,它与 viewDidLoad 是相互呼应的。在ios 6之后,就不在使用viewDidUnload,而仅仅支持didReceiveMemoryWarning:

4、视图释放与销毁:dealloc

dealloc 是当前 viewController 被释放的时候,清空所有当前 viewController 里面的实体和数据来释放内存,该方法是自动调用的,无需手动执行。例如当 一个实例化myControllerView被 dismissModalViewControllerAnimated 或者navigationController回到上一页的时候,这个方法就会被自动调用。因为这个页面已经不再使用了,所以可以把所有实体和数据都释放(release)掉。
viewDidUnload区别:viewDidUnload是内存除当前以外所有viewController同时执行,而dealloc只是当前viewController执行。


参考链接:

http://blog.csdn.net/weasleyqi/article/details/8090373

http://blog.csdn.net/q199109106q/article/details/8614044

http://www.cnblogs.com/pengyingh/articles/2342948.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值