0

数百レベルの iPhone 用ゲームを作成しています。これらはすべて、ユーザーがレベルを選択できるようにスタート ボタンを押すと、スクロール ビューに読み込まれます。UIImageViewただし、画面をユーザーに表示する前に、多くの計算を行い、キー付きエンコーダーから各レベルのデータを読み込み、スクロールビューに を描画する必要があります。現時点では、これはすべて から呼び出すメソッドによって行われるviewDidLoadため、View Controller がスタックにプッシュされる前にすべてが行われます。その結果、ユーザーがこのボタンを押すと、かなりの遅延が発生します。

ビューコントローラーをすぐにプッシュし、ビューコントローラーが表示された後にレベルをレイアウトして、ユーザーエクスペリエンスを向上させたいと思います。からメソッドを呼び出すことでこれが可能になるとViewDidAppear思いますが、可能な限り高速にするために、すぐに計算を開始したいと思います。

これを行う方法はありますか?おそらくグランドセントラルディスパッチを使用するか、作業を別のスレッドに割り当てますか?

助けてくれてありがとう!

4

2 に答える 2

0

複雑な計算を開始する前に UI コンテンツを最初にロードする (ただし必ずしも表示する必要はない) 場合は、コードを-viewDidLoadメソッド内に保持し、[super viewDidLoad]呼び出しの後に挿入します。メイン スレッド (つまり、UI) でのみ操作する必要があるオブジェクトが計算に含まれていない場合は、Grand Central Dispatch を使用して、 で実行される計算用の非同期キューを設定しますdispatch_async()

編集: を使用しUINavigationControllerてこのビューをスタックにプッシュしていることと、すべての計算が UI に直接影響すること、つまりメイン スレッドで実行する必要があることを理解しました。したがって、コードを-viewWillAppear:メソッドに配置することをお勧めします。このようにして、システムは計算が呼び出される前にビューをプッシュする必要があります。

必要に応じて、viewDidLoad:メソッド内で、計算のみを実行し、結果を非同期スレッドの変数に格納する別のメソッドを呼び出すことができます。アプリは、これらの計算を で読み取ることができますviewDidLoad:

于 2012-07-29T07:03:08.977 に答える
0

デリゲートで使用する魔法のメソッドはありません。あなたは非常に一般的な質問をしています: iOS でスレッド化を行う方法.

于 2012-07-29T11:11:00.300 に答える