美文网首页
iOS-AppDelegate和UIViewController

iOS-AppDelegate和UIViewController

作者: JianLee | 来源:发表于2021-08-05 15:35 被阅读0次

简述

AppDelegate和ViewController的生命周期在iOS中是非常重要的内容,它们贯穿了整个应用程序的生命周期,不同生命周期有包含了很多方法,我们根据产品需求分析不同情况中实现不同功能。

AppDelegate的生命周期

在创建一个iOS工程后,会自动创建一个AppDelegate类,它继承了UIResponder类,并且遵守了UIApplicationDelegate协议。在这个类中实现了一系列的UIApplicationDelegate的协议方法。下面是对AppDelegate生命周期中一些常用方法的介绍:

  • application
    程序启动成功后会调用的方法
    iOS程序真正的入口,设置首页:
    internal func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        //搭建UI界面,请求数据、展示数据
        window = UIWindow(frame: UIScreen.main.bounds)
        window?.backgroundColor = UIColor.red
        window?.rootViewController = UTabBarController()
        window?.makeKeyAndVisible()
        
        return true
    }
  • applicationWillResignActive
    程序将变成非活跃状态时调用的方法
    比如按home键让程序在后台运行、来电可以将应用程序变成非活跃状态。
    func applicationWillResignActive(_ application: UIApplication) {
        //一般在这里关闭定时器、暂停视频/音频、暂停游戏。。。
        print("已经进入后台-applicationWillResignActive")
    }
  • applicationDidEnterBackground
    程序进入后台时调用的方法
    func applicationDidEnterBackground(_ application: UIApplication) {
        print("已经进入后台-applicationDidEnterBackground")
    }
  • applicationWillEnterForeground
    程序将进入前台时调用的方法
    func applicationWillEnterForeground(_ application: UIApplication) {
        //根据情况去开启定时器、继续播放视频/音频、继续游戏。。。。
        print("将要进入前台-applicationWillEnterForeground")
    }
  • applicationDidBecomeActive
    程序恢复活跃状态时调用的方法
    从后台回到前台、来电打断结束(挂机)就会从非活跃状态变成活跃状态。
    func applicationDidBecomeActive(_ application: UIApplication) {
        //根据情况去开启定时器、继续播放视频/音频、继续游戏。。。。
        print("已经变成活跃状态-applicationDidBecomeActive")
    }
  • applicationWillTerminate
    程序将要终止时调用的方法
    一般情况,只有从后台强制将应用程序退出的时候,程序才会终止。
    func applicationWillTerminate(_ application: UIApplication) {
        //让应用程序不能后台运行:在info.plist文件中加添key为"Application does not run in background",值为YES的键值对
         print("程序将要终止-applicationWillTerminate")
    }
  • applicationDidReceiveMemoryWarning
    程序接收到内存警告的时候会自动调用的方法
    func applicationDidReceiveMemoryWarning(_ application: UIApplication) {
        //销毁一些不必要的内存。一般在这儿去释放一些缓存数据
        print("接收到内存警告-applicationDidReceiveMemoryWarning")
    }
ViewController的生命周期

ViewController的生命周期过程如图所示:

image.png
  • init
    如果通过xib或storyboard创建,会首先调用该方法

  • loadView
    当view需要被展示而它却是nil时,viewController会调用该方法。如果代码维护View的话需要重写此方法,使用xib维护View的话不用重写。

    override func loadView() {
        super.loadView()
        //创建比较关键的view
        print("loadView")
    }
  • viewDidLoad
    执行完loadView后继续执行viewDidLoad,在viewDidLoad中最适合创建一些附加的view和控件。
    override func viewDidLoad() {
        super.viewDidLoad()
        //创建一些附加view和控件
        print("viewDidLoad")
        loadData(false)
    }
  • viewWillApper
    将显示在屏幕之前调用,在这个方法中可以进行一些显示前的处理,如:弹出键盘、添加特殊的出场动画等。
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        //显示前的处理,比如弹出键盘、添加特殊的出场动画
        print("viewWillAppear")
    }
  • viewDidApper
    显示在界面上的时候会自动调用。如果在显示结束后还需要添加一些操作,可以在这个方法中进行添加。
    override func viewDidAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        //界面显示后添加一些操作
        print("viewDidAppear")
    }
  • viewWillDisapper
    视图即将消失、被覆盖或者是被隐藏的时候调用。
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        //视图即将消失、被覆盖或者被隐藏时调用
        print("viewWillDisappear")
    }
  • viewDidDisappear
    视图已经消失、被覆盖、被隐藏的时候调用,用户已经看不到视图了。
    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        //视图已经消失、被覆盖、被隐藏的时候调用
        print("viewDidDisappear")
    }
  • viewWillUnload
    如果当前有能被释放的view,系统会调用viewWillUnload方法来释放view。

总结

loadView和viewDidLoad的区别就是,loadView时view还没有生成,viewDidLoad时,view已经生成了,loadView只会被调用一次,而viewDidLoad可能会被调用多次(View可能会被多次加载),当view被添加到其他view中之前,会调用viewWillAppear,之后会调用viewDidAppear。当view从其他view中移除之前,调用viewWillDisAppear,移除之后会调用viewDidDisappear。当view不再使用时,受到内存警告时,ViewController会将view释放并将其指向为nil。

ViewController的生命周期中各方法执行流程如下:

init—>loadView—>viewDidLoad—>viewWillApper—>viewDidApper—>viewWillDisapper—>viewDidDisapper—>viewWillUnload->viewDidUnload—>dealloc

相关文章

网友评论

      本文标题:iOS-AppDelegate和UIViewController

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