Swift - UIViewController生命周期详解(附:VC相关方法介绍)

 

UIViewController(视图控制器)想必你们都不会陌生,开发中经常会用到。此次讲讲它的生命周期。html

 

1,视图的生命周期swift

说是 ViewController 的生命周期,其实指的是它控制的视图(View)的生命周期。每当视图的状态发生变化时,视图控制器会自动调用一系列方法来响应变化。app

经过这些方法,咱们就能够跟踪到视图的整个生命周期。各个方法按执行顺序排列以下:ide

 

(1)init:初始化程序函数

 

(2)loadView:视图初始化测试

这个方法不该该被直接调用,而是由系统自动调用。它会加载或建立一个 view 并把它赋值给 UIViewController 的 view 属性。spa

同时重写 loadView 方法的时候,不要调用父类的方法。code

 

(3)viewDidLoad:视图加载完成,但还没在屏幕上显示出来orm

咱们能够重写这个方法,对 view 作一些其余的初始化工做。好比能够移除一些视图,修改约束,加载数据等。htm

 

(3)viewWillAppear:在视图即将显示在屏幕上时调用

咱们能够在这个方法里,改变当前屏幕方向或状态栏的风格等。

 

(4)viewDidApper:在视图显示在屏幕上时调用时调用

咱们能够在这个方法中,对视图作一些关于展现效果方面的修改。

 

(5)viewWillDisappear:视图即将消失、被覆盖或是隐藏时调用

 

(6)viewDidDisappear:视图已经消失、被覆盖或是隐藏时调用

 

(7)viewVillUnload:当内存太低时,须要释放一些不须要使用的视图时,即将释放时调用

(8)viewDidUnload:当内存太低,释放一些不须要的视图时调用。

注意:自 iOS6 起,viewWillUnload 和 viewDidUnload 这两个方法被废除了。当系统发出内存警告的时候,会自动把 view 给清除掉,不用咱们再特别处理。

同时系统还会调用 didReceiveMemoryWarning 方法通知视图控制器,咱们能够在这里面进行一些操做,来释放一些额外的资源。(一般来讲不用操做,比较最占资源的 view 已经被系统给清理了。)

 

2,视图状态的转换

在实际应用中,视图一般不会按照上面列的流程一次执行下来,可能会在可见与不可见的状态间互相转换。好比一开始视图是可见的,接着咱们跳转到另外一个 ViewController,这时原来视图就变成不可见的。后面咱们又跳转回来,那么这个视图就又是可见的。

当视图的可见性发生变化时,视图控制器对应的方法也会随之响应。具体可见下图:

原文:Swift - UIViewController生命周期详解(附:VC相关方法介绍)

特别要注意的是:Appearing 和 Disappearing 这两个状态是能够互相转化的。

 

3,测试样例说明

(1)ViewController 是首页视图控制器,咱们将里面全部的与生命周期有关的函数都打印出来。
(2)同时 ViewController 中添加了一个“跳转”按钮,点击后跳转到另外一个视图控制器(AnotherViewController)。
(3)AnotherViewController 里有个“返回”按钮,点击又会回到前一个页面。

原文:Swift - UIViewController生命周期详解(附:VC相关方法介绍)



4,测试代码 (1)ViewController.swift

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

import UIKit

 

class ViewControllerUIViewController {

     

    //视图初始化

    override func loadView() {

        super.loadView()

        print("loadView")

    }

     

    //视图加载完成

    override func viewDidLoad() {

        super.viewDidLoad()

        print("viewDidLoad")

         

        //建立跳转按钮

        let button:UIButton UIButton(type: .System)

        button.frame=CGRectMake(10, 50, 100, 30)

        button.setTitle("跳转", forState: .Normal)

        button.addTarget(self,action:#selector(jump),forControlEvents:.TouchUpInside)

        self.view.addSubview(button);

    }

     

    //视图将要出现的时候执行

    override func viewWillAppear(animated: Bool) {

        print("viewWillAppear")

    }

     

    //视图显示完成后执行

    override func viewDidAppear(animated: Bool) {

        print("viewDidAppear")

    }

     

    //视图将要消失的时候执行

    override func viewWillDisappear(animated: Bool) {

        print("viewWillDisappear")

    }

     

    //视图已经消失的时候执行

    override func viewDidDisappear(animated: Bool) {

        print("viewDidDisappear")

    }

     

    //收到内存警告时执行

    override func didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

    }

     

    //跳转到另外一个视图

    func jump(){

        print("点击按钮,开始跳转!")

        let anotherVC = AnotherViewController()

        presentViewController(anotherVC, animated: true, completion: nil)

    }

}

(2)AnotherViewController.swift

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

import UIKit

 

class AnotherViewControllerUIViewController {

 

    override func viewDidLoad() {

        super.viewDidLoad()

 

        //建立返回按钮

        let button:UIButton UIButton(type: .System)

        button.frame=CGRectMake(10, 150, 100, 30)

        button.setTitle("返回", forState: .Normal)

        button.addTarget(self,action:#selector(back),forControlEvents:.TouchUpInside)

        self.view.addSubview(button);

    }

     

    //返回以前视图

    func back(){

        print("点击按钮,开始返回!")

        self.dismissViewControllerAnimated(true, completion: nil)

    }

 

    override func didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

    }

}


5,运行测试
咱们从 ViewController 跳到 AnotherViewController,再从 AnotherViewController 跳回 ViewController。整个控制台打印出来的流程以下:

原文:Swift - UIViewController生命周期详解(附:VC相关方法介绍)

相关文章
相关标签/搜索