XIBファイル読み込みとコードでView構築,どっちが速い?
== 2009/11/25 追記 ==
MonoTouchのメーリングリストhttp://lists.ximian.com/pipermail/monotouch/2009-November/001589.htmlで,これを詳細に調べたRory Blythさんのまとめを引用します:
- Keep the MainWindow.xib file
- Keep it simple
- Limit it to your app's initial screen
- Code everything else by hand
MainWindow.xib だけは置いておくのですが,それもViewを置く程度のシンプルなものにしておいて,それ以外はコードで書くのがよいみたいです.これにより得られるロード時間のメリットは10msecの桁程度ですから,実体験で分かるものではないでしょう.
== はじめに ==
Viewのロード方法は,XIBファイルの読み込みとコードで書くのと2通りの方法があります.どちらでも問題なく使えているのですが,ふと,どっちが速いのかと思いシミュレータと実機で速度比較をしてみました.
== テストコード ==
作成したコードはラベルとボタンがあるだけのシンプルなもので,XIBを読み込むものとコードで書いたものそれぞれのControllerについてインスタンスしてからViewDidLoad()が呼び出されるまでの時間を表示します.ボタンを押すたびに,XIBとコードそれぞれのControllerは互いにControllerをインスタンスしてViewに追加していきます.
サンプルコードはこちらです: OneDrive
実機とシミュレータいずれもReleaseでビルドしています.結果は:
iPhoneシミュレータ (Mac mini intel core2duo 2.0GHz)
- 1回目
- XIB 16msec
- CODE 3 msec
- 2回目
- XIB 1msec
- CODE 0.4msec
- 3回目
- XIB 1msec
- CODE 2msec
iPod Touch (1G)
- 1回目
- XIB 147 msec
- CODE 227 msec
- 2回目
- XIB 31 msec
- CODE 15 msec
- 3回目
- XIB 26 msec
- CODE 14 msec
- 4回目
- XIB 25 msec
- CODE 13 msec
となりました.初回と2回目以降でロード時間に違いがありすぎる理由が分かりません.初回はライブラリなどが初期化かなにかをしているのだとして,2回目以降の値が実力値だとすればコードで書いたほうがXIB読み込みより2倍速いです.またシミュレータは実機よりかなり速いです.