2016-03-23 5 views
0

私は、私のviewControllerに、Main.storyboardのInterface Builderを使用して作成された約15個のボタンと、プログラムで作成した残りのボタンを持っています。遅延を避けるために、ほとんどのものをバックグラウンドスレッドに送りましたが、15個のボタンを含むすべてのUIはスレッドセーフではありませんでした。これら15個のボタンがいつ正確にロードされたかを知りたい。 viewDidLoadの前、viewDidLoadviewDidAppearの間などですか?さらに、私はまだいくつかの遅延と画面のフリーズを取得しているので、私はこのUIViewControllerのメソッドのほとんどを初期化しようとAppDelegateでこのメソッドを呼び出すので、アプリの起動時に時間のかかるタスクを移動しますパフォーマンスの向上と印刷ステートメントは、私がView Controllerを提示するのではなく、アプリの起動時に重いコードのほとんどが呼び出されていることを実際に示しています)。正確にUIViewController要素(Main.storyboardでIB経由で作成)が開始/ロードされたときは?

しかし、このviewControllerを初めて取得するたびに初期の負荷が重いことがあります。私がrootViewControllerに戻って再びこのViewControllerに戻ると(rootViewControllerのpresentViewController(viewController, animated: false, completion:nilとViewControllerのself.dismissViewController(animated:false, completion:nil)を介して)、私がアクセスしたすべての事後の時間はもう凍結されません。私はなぜそれがすべてのviewDidLoad, viewWillAppear, viewDidAppearが必要なスーパークラス以外のコードを持っていなくても、私は初めてViewControllerにアクセスし、すべての他の時間に初めてアクセスしたときには時間がかかりません) 。

このように、この初期の負荷がInterface Builderを使用して作成された要素から発生する可能性があるかどうかは疑問になりました。私はこの行動を説明するために考えられる唯一の理由です。ここでは、私がviewControllerに初めてアクセスしたときに重い読み込みがある場合の動作を示すInstrumentsのスクリーンショットと、UIに何ら影響を与えない小さなピーク(これは私が望むものです)時間。 initWithNibName

Instruments Sample Screenshot

答えて

1

:ペン先がloaded.Itれる前バンドルが呼び出されますが呼び出されるコントローラ initWithCoder

を生成するために、ビュー(またはウィンドウ)コントローラに送信されるメッセージでありますストーリーボードからの読み込み中(ストーリーボードのみ)。これはアーカイブ内のすべてのオブジェクトに送信され、アーカイブを解凍するためのメッセージです。

ペン先がloaded.Itは、ペン先のオブジェクトのすべてが、そのペン先での出口接続のすべてを接続した後、完全にロードされた後、ニブ内のすべてのオブジェクトに送信されたメッセージである後awakeFromNibが呼び出されます。

関連する問題