iOS - loadView和viewDidLoad

loadView方法

每一个视图控制器(UIViewController)都会生成一个loadView方法,很多情况下我们都不会使用它,因为创建一个视图控制器之后并没有该方法,而且苹果也建议不要直接调用该方法,如果需要那么就要重写loadView方法。那么该方法到底什么时候被调用?有什么作用?默认的实现是怎样的?

loadView什么时候被调用

每次我们访问视图控制器(UIViewController)的view时(比如使用:controller.view或者self.view),当view为nil,那么loadView方法就会被调用,并创建一个view赋值给视图控制器(UIViewController)的view属性。

loadView有什么作用

loadView方法是用来负责创建视图控制器(UIViewController)的view,那么换句话说,我们可以在该方法中进行自定义view,对的,就是让我们自定义视图控制器(UIViewController)的view。

loadView的默认实现

默认实现,那么就要看super.loadView()到底做了什么事情,具体如下

1)它会先去查找与UIViewController相关联的xib文件,通过加载xib文件来创建UIViewController的view。如果在初始化UIViewController的时候指定了xib文件名,那么就会根据传入的xib文件名去加载对于的xib文件:

ViewController(nibName: "ViewController", bundle: nil)

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

ViewController() // 加载ViewController.xib文件

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

self.view = UIView(frame: UIScreen.main.bounds)

所以super.loadView()执行了上面2个步骤

正确使用loadView方法

前面也已经说到loadView方法可以让我们自定义view,那么我们如何正确自定义view呢?如果想通过代码来创建UIViewController的view,那么首先我们需要重写loadView方法,并且不需要调用super.loadView()方法,因为上面也说啦,如果没有xib文件,执行super.loadView()方法默认会为我们创建一个空白的UIView,然后赋值给UIViewController的view属性,竟然我们选择了通过代码来自定义UIView,那么就没有必要事先创建一个空白的UIView,这样可以节约资源,如果调用来super.loadView()方法也没关系只不过是多创建了一个UIView而言,浪费了一点点资源。

override func loadView() {
    view = UIView(frame: UIScreen.main.bounds)
}


ViewDidLoad方法

ViewDidLoad什么时候被调用

不管是通过xib文件还是通过重写loadView方法创建UIViewController的view,在view创建完成之后都会调用viewDidLoad方法,也可以理解为当UIViewController的view被加载到内存中时,viewDidLoad方法会被调用。

ViewDidLoad有什么作用

一般情况下我们会在ViewDidLoad方法中执行一些界面的初始化操作,比如向view中添加一些子视图、从数据库加载数据、或者进行网络请求等。

 override func viewDidLoad() {
        super.viewDidLoad()
        // 添加子视图
        let subView = UIView(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
        view.addSubview(subView)
    }


猜你喜欢

转载自blog.csdn.net/longshihua/article/details/79420686
ios