自分は絶賛iOSの勉強中のAndroidエンジニアです。
理解しやすくするためiOSのUIViewControllerのライフサイクルをAndroidのActivityとを比較してみました。
まずはおなじみActivityのライフサイクル
そしてiOSのライフサイクル
iOSのライフサイクルはそもそも考え方が違うみたいです。
というのも公式には下記のようにライフサイクルにはAppearかDisappearのステータスの概念しかないようです。(Androidはその観点だけによってライフサイクルが作られているわけじゃないしメインの観点でもない。)
なので、そもそも比較自体に無理もあるのですが、とはいえ、呼ばれるタイミングなどは少なからず似通ってるだろうと思って、Activityのどこのメソッドに相当するのか整理してみました。
似ている というのは呼ばれるタイミングがということです。
loadView,viewDidLoadはonCreateに似ている
呼ばれ方が下記の点で、ActivityのonCreateに似ているなと思いました。
- 画面遷移後1度呼ばれる。
- 画面遷移して戻って来た時は呼ばれない
viewWillAppear,viewDidAppearはonResumeに似ている
呼ばれ方が下記の点で、ActivityのonResumeに似ているなと思いました。
- 画面遷移後1度呼ばれる
- 画面遷移して戻って来た時も呼ばれる
ただ下記の点では違いました。
- 画面のON/OFFをしても呼ばれない
- アプリをバックグラウンドにやって、再度アプリをフォアグランドに戻しても呼ばれない
viewWillDisappear,viewDidDisappearはonPauseに似ている
呼ばれ方が下記の点で,ActivityのonPauseに似ているなと思いました。ただ、これだけだとonDestroyに似ていると言えるのですが、(viewWillAppear, viewDidAppear)とセットと考えるならonPauseだろうという思惑が入った結果、こちらを選びました。
- 画面を閉じる際に1度呼ばれる
ただ下記の点では違いました。
- 画面のON/OFFをしても呼ばれない
- アプリをバックグラウンドにやる際に呼ばれない
昔はviewWillUnload,viewDidUnloadもあったみたい
試してませんが、こちらはonDestroyっぽいのかな。
やっぱり結構無理があった
無理やり当てはめてみたけど下記の点で結構無理があった感。
- iOSのライフサイクルは表示されているか否かだけに依存しているけど、Androidはそうじゃない
- iOSは画面のON/OFFとかフォアグランド/バックグランドは意識してない
- onCreate <=> (loadView,viewDidLoad)とか呼ばれるタイミングは似通ってるかもだけど、中でやってることはイコールじゃない
とはいえ、比較によって理解が深まったので良かったです。