美文网首页
iOS 生命周期注意点

iOS 生命周期注意点

作者: 朝雨晚风 | 来源:发表于2018-09-28 14:12 被阅读40次

    viewWillAppear和viewDidAppear什么时候被调用

    • 当你调用pushViewController:animated把一个视图控制器压入UINavigationController的时候,UINavigationController会自动调用这些方法。
    • 当你abBarController时,UITabBarController会直接调用这些方法,
    • 当你使用presentModalViewController时也会调用方法。
    • 当一个视图控制器的视图被添加到一个window中时也会调用这些方法。

    注意这种情况下是不会调用的

    [viewControllerA.view addsubView:viewControllerB.view]
    

    当你添加你的视图控制器的视图作为一个视图的子视图而不是作为window的子视图,UIWindow 作为作为一个应用程序的根视图(root view),是旋转和初始布局消息等事件产生的来源。不是作为window的子视图,那么这个view就不会再接收到UIWindow传来的消息,像viewWillAppear:这种方法就不会被调用。你需要在作为容器的视图控制器中手动的调用嵌套控制器的viewWillAppear和viewDidAppear。
    Apple 对 view controllers 的总的建议曾经是“一个 view controller 管理一个全屏幕的内容”。这个建议后来被改为“一个 view controller 管理一个自包含的内容单元”。

    addchildviewcontroller

    对于上面的应当使用addchildviewcontroller

    [self addChildViewController:newVC];
    [self.view addSubview:newVC.view];
    

    在调用[父视图控制器 addChildViewController:子视图控制器]之前,无需显式调用[子视图控制器 willMoveToParentViewController:父视图控制器]方法,因为已经默认调用了。

    在调用[父视图控制器 addChildViewController:子视图控制器]之后,要仅接着调用[子视图控制器 didMoveToParentViewController:父视图控制器]方法。

    在调用[子视图控制器 removeFromParentViewController]之前,必须先调用[子视图控制器 willMoveToParentViewController:nil]。

    在调用[子视图控制器 removeFromParentViewController]之后,无需显式调用[子视图控制器didMoveToParentViewController:父视图控制器],因为已经默认调用了。

    在调用transitionFromViewController之前,调用[fromController willMoveToParentViewController:nil]。

    在调用transitionFromViewController之后,调用[toController didMoveToParentViewController:父视图控制器]。

    dealloc

    一、什么时候回调用dealloc?

    1. 这个类被release的时候会被调用;
    2. 这个对象的retain count为0的时候会被调用;

    二、在dealloc中应该做的事

    • 使用CFRelease()去释放非OC类的对象(CF类),因为它们的纯C的,ARC管不着。
    • 释放观察行为(KVO,noticication)。可以防止向不存在的对象发送通知造成crash。
    - (void)dealloc {
      CFRelease(someCoreFoundationObjects);
      [[NSNotificationCenter defaultCenter] removeObserver:self];
    }
    

    三、遇到的问题
    A类创建了两个对象a1、a2 , B单列对象.delegate= a1,a2不需要,当a2对象被销毁的时候,执行了dealloc,dealloc中释放代理 ,B单列对象.delegate= nil,造成a1对象不能再收到代理方法了。

    相关文章

      网友评论

          本文标题:iOS 生命周期注意点

          本文链接:https://www.haomeiwen.com/subject/iumuoftx.html