2

私のアプリ デリゲートapplicationDidBecomeActive:では、ユーザーのログイン ステータスの有効性を確認し、失敗した場合はログイン ページをスローします。このチェックにはネットワーク呼び出しが含まれており、ネットワークが貧弱な状況ではメイン UI がブロックされ、アプリが事実上ハングする可能性があるのではないかと心配しています。

アプリがアクティブになると、タイミングの観点から何が起こりますか? applicationDidBecomeActive:メインスレッドでブロック/実行の内容を実行しますか? このネットワーク呼び出しを非同期で (たとえば GCD を使用して) 実行する必要がありますか?

4

2 に答える 2

8

このapplicationDidBecomeActiveメソッドは、すべての UIKit メソッドと同様にメイン スレッドで呼び出されます。バックグラウンド スレッドで実行時間の長いプロセスやネットワーク アクセスを実行することを常に確認する必要があります。

の非同期形式を使用するNSURLConnectionか、GCD を使用して、バックグラウンド キューでアクションを実行します。

于 2013-03-10T22:38:41.007 に答える
2

アプリケーションデリゲートapplicationDid...メソッドのいずれかで同期ネットワーク操作を実行しないでください(プログラムのどこでも同期ネットワーク操作を実行しないでください)。実際、起動/バックグラウンド/再開イベントへの応答に時間がかかる場合、iOSはアプリを終了します。クラッシュログにはそのことが記載されてい<Your app> failed to launch in timeます。

于 2013-03-10T23:00:07.650 に答える