iOS控件

从loadView()和viewDidLoad()的区别说起

2016-08-04  本文已影响2786人  VinZZZZ

引言

loadView()和viewDidLoad()是入行iOS开发经常遇到的两个方法。记得当初也看了Apple官网提供的手册和资料,然而实际开发起来,仍不知怎么区分。今天就结合UIViewController的生命周期好好理理loadView()和viewDidLoad()的区别。

加载顺序

class ViewController: UIViewController {
 
override func loadView() {
   print("loadView")
 }

 override func viewDidLoad() {
    print("viewDidLoad")
    super.viewDidLoad()
 }

 override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
 }
}

直接执行后,输出结果:


可以看到先执行了loadView(),然后才执行viewDidLoad()。

UIViewController的生命周期

UIViewController生命周期

套用网上的一张UIViewController中view的生命周期截图。

  class ViewController: UIViewController {
 
 // override func loadView() {
  //  print("loadView")
// }

  override func viewDidLoad() {
      print("viewDidLoad")
      super.viewDidLoad()
 
 }
  override func didReceiveMemoryWarning() {
      super.didReceiveMemoryWarning()
      // Dispose of any resources that can be recreated.
   }
 }
override func loadView() {
    print("loadView")
    let view = UIView(frame: UIScreen.mainScreen().bounds)
    view.backgroundColor = UIColor.blueColor()
    self.view = view
 }

结果如下图所示:


控制台中的两遍结果

那么,为什么文章起始处的控制台输出了两遍"loadView"和"viewDidLoad"?

可以大胆猜想这应该是系统访问了两次viewController的view属性。由于view一直没有被赋值,因此每次都会调用loadView()和viewDidLoad()。这也说明了,如果不override loadView()或在override的loadView()为self.view正确赋值后,控制台将会只输出一次“viewDidLoad"。

总结

上一篇 下一篇

猜你喜欢

热点阅读