控制器的生命周期



控制器的生命周期:loadView—>viewDidLoad—>willSublayout—>didSublayout—>viewWillAppear—>viewDidAppear—>viewWillDisappear—>viewDidDisappear 


1.loadView:    是苹果专门为手写代码准备的,一旦实现了该方法  xib / sb 自动失效;准备视图层次结构的根视图;在视图没有被实例化之前,不用追踪view 否则会造成递归调用。 

2. viewWillAppear

1)集成百度地图的时候,在viewWillAppear方法中,具体方法可以打印。

BMKMapView新增viewWillAppearviewWillDisappear方法来控制BMKMapView的生命周期,并设置delegate,代码如下:

(void)viewWillAppear:(BOOL)animated    

{    

    [_mapView viewWillAppear];    

    _mapView.delegate = self; // 此处记得不用的时候需要置nil,否则影响内存的释放    

}    

-(void)viewWillDisappear:(BOOL)animated    

{    

    [_mapView viewWillDisappear];    

      _mapView.delegate = nil; // 不用时,置nil    


2)有的时候,我们的视图使用了Navigation Controller ,但是主界面(rootviewcontroller)或其它push进入的界面 想使用一个全屏的view,就是说,不显示顶部的navigationBar,这个时候,就需要我们来隐藏了。 


//隐藏NavigationBar 

-(void) viewWillAppear:(BOOL)animated{ 

     

    [self.navigationController setNavigationBarHidden:YES animated:YES]; //设置隐藏 

    [super viewWillAppear:animated]; 


-(void) viewWillDisappear:(BOOL)animated{ 


    [self.navigationController setNavigationBarHidden:NO animated:YES]; 

    [super viewWillDisappear:animated]; 

         


3)添加通知的时候,这个代码建议写到viewWillAppear

-voidviewWillAppear: 

   移除通知的时候,建议写在viewWillDisappear


4 如果要删除系统自带TabBar里面的控制时可以用下面的方法

- (void)viewWillAppear:(BOOL)animated

{

      [super viewWillAppear:animated];

     XZLog(@"删除之前%@", self.tabBar.subviews);

    // 遍历tabBar中所有的子控件,删除不需要控件

    // UITabBarButton 这个类是私有API

    for (UIView *subView in self.tabBar.subviews) {

        if ([subView isKindOfClass:[UIControl class]]) {

            [subView removeFromSuperview];

        }

    }

    XZLog(@"删除之后%@", self.tabBar.subviews);




3.动画效果的执行  需要在viewDidAppear生命周期方法中执行


viewDidAppear

//界面已经出现的时候会自动调用 在这个方法中所有的子视图的位置已经设置完毕。




4.layoutSubviewsUIViiew自带的方法.


// 控件的frame发生改变的时候就会调用,一般在这里重写布局子控件的位置和尺寸

// 重写了这个写方法后,一定调用[super layoutSubviews];


layoutSubviews方法(何时调用)


1)调整子控件的frame,还有它的当前这个方法所在类的控件frame发生变化之后也会来调用,

2)只有当前控件的frame中的尺寸size”发生变化才会来调用此方法,如果只是当前类的x,y发生变化了,是不会调用layoutSubviews方法的。因为子控件的x,y是参照当前类的x,y,类的x,y发生变化直接子控件的x,y也会随之变化,

3)屏蔽旋转时也会调用此方法.

4)init初始化时不会调用此方法。

5)addSubview会触发layoutSubviews



你可能感兴趣的:(控制器的生命周期)