私は、私のviewControllerに、Main.storyboardのInterface Builderを使用して作成された約15個のボタンと、プログラムで作成した残りのボタンを持っています。遅延を避けるために、ほとんどのものをバックグラウンドスレッドに送りましたが、15個のボタンを含むすべてのUIはスレッドセーフではありませんでした。これら15個のボタンがいつ正確にロードされたかを知りたい。 viewDidLoad
の前、viewDidLoad
とviewDidAppear
の間などですか?さらに、私はまだいくつかの遅延と画面のフリーズを取得しているので、私はこの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