UIViewController関連ライフサイクルまとめ(転載)

3675 ワード

前言
何気なくこのブログを見て、とても役に立つと思って、書いたのも深く浅くて、だから私の原文の住所に転載します
関連ライフサイクルメソッドの呼び出しタイミング
awakeFromNib
ビューがStoryboardまたはNibファイルからロードされると、このメソッドが呼び出され、すべてのオブジェクトが作成された後にのみ呼び出されます.
ここでは追加の「Set Up」の仕事をすることができます.
このメソッドが呼び出されると、すべてのnibファイルのオブジェクトが作成され、すべてのIBOutletsとActionが確立されます.
このメソッドを上書きする場合はsuperメソッドを呼び出す必要があります.デフォルトのsuperメソッドでは実装されていません.
また、Archiveとしてオブジェクトをインスタンス化しているため、ViewControllerは初期化時にinitWithCoder:を呼び出している.手動でinitを呼び出すとnibファイルからロードされません.
このメソッドはloadNibName:クラスのメソッドを実行するときに呼び出されます.
loadView()
このメソッドは、ViewController作成後にself.viewをロードする必要がある場合に呼び出されます.このメソッドは直接呼び出されるべきではありません.
私たちのインタフェースがStoryboardで作成されている場合は、この方法を上書きするべきではありません.
ViewControllerが次のような場合、このメソッドではnibファイルからView:1.View Controllerがstoryboardからインスタンス化されます.2.initWithNibName:bundle:によって初期化される.3.App Bundleには、このクラス名と同じnibファイル名があります.self.viewを呼び出すと、self.viewがnilでない場合、オブジェクトが直接呼び出されます.nilの場合、self.loadView()を呼び出してUIViewを作成し、このオブジェクトをself.viewに割り当てます.
この関数でself.viewプロパティを呼び出すとデッドループになります.self.viewにアクセスすると、この属性が空であることがわかり、loadView()メソッドが呼び出され、デッドサイクルが発生します.
このメソッドが上書きされた場合、superメソッドは呼び出されません.
viewDidLoad()
このメソッドは、ViewControllerのViewがロードされると呼び出されるため、通常は1回しか呼び出されません.viewDidLoad()において、UIButtonのコンテンツを設定するなど、Viewを設定することができる.ビューがnibファイルからロードされている場合は、この設定を行うことができます.
このときviewはまだview hierarchyに組み込まれておらず、メモリにロードされているだけです.ここでself.presentViewControllerなどの操作を実行するとエラーが発生します.
このメソッドを上書きする場合はsuperメソッドを呼び出す必要があります.
デッドサイクル問題self.viewが空の場合、loadView()が呼び出されます.次の場合、デッドサイクルが発生します.
var str = "loadView"

override func loadView() {  
    //      self.view
    str = "loadView"
    print(str)
}

override func viewDidLoad() {  
    //   self.view
    str = "viewDidLoad"
    print(str)
    let newView = self.view
}```
           :
>loadView viewDidLoad 
>loadView 
>viewDidLoad 
>loadView 
>viewDidLoad

     `newView`   nil。

   ` loadView()`       self.view,   `viewDidLoad()`       `self.view`         ,             TODO。(         `let newView = self.view`   )。    `loadView()`       `self.view`,        。

## viewWillAppear
  View        View Hierarchy          ,    View          。         ,      View           。

          frame           ,    View       View Hierarchy,           。

__           super   。__

## viewWillLayoutSubviews

  `ViewController.view`      Subviews    。                   ,    、       layout。

     AutoLayout      。


## viewDidLayoutSubviews
      ,        。

    AutoLayout   。

## viewDidAppear
            ,                。

#           

## AutoLayout          Frame
   AutoLayout          UITextView,          Frame     :

## viewDidLoad
frame = (20 40; 560 160); contentSize: {560, 133}; contentOffset: {0, 0}; ```
viewWillAppear
frame = (20 40; 560 160);  
contentOffset: {0, 0};  
contentSize: {560, 133};  ```

## viewWillLayoutSubviews
frame = (20 40; 560 160); contentOffset: {0, 0}; contentSize: {560, 133};

## viewDidLayoutSubviews
frame = (20 40; 374 296); contentOffset: {0, -15}; contentSize: {374, 184} ```
viewDidAppear
frame = (20 40; 374 296);  
contentOffset: {0, -15};  
contentSize: {374, 184}; ```

    , ` viewDidLayoutSubview`   , UITextView   Frame        ,  `contentSize`   `contentOffset`       。

   ` viewWillAppear`    , view          ,         。

    `viewWillAppear`    ,   UITextView             。

      ,viewWillLayoutSubview viewDidLayoutSubviews      。    ,                     。