3

私が無限ループに陥っていないこと、およびまだロード中であることをウォッチドッグに通知する適切な方法は何ですか?

クラッシュログに例外タイプ: 00000020 例外コード: 0x8badf00d が表示され、xcode とは別に iPhone からアプリを実行している場合のみ

時間がかかるコードは次のとおりです。

- (void)viewDidLoad {
    [super viewDidLoad];
 Reachability* reachability = [Reachability sharedReachability];
 [reachability setHostName:@"www.apps2you.com"];    // set your host name here
 NetworkStatus remoteHostStatus = [reachability remoteHostStatus];

 if (remoteHostStatus == ReachableViaWiFiNetwork||remoteHostStatus == ReachableViaCarrierDataNetwork )
 {
  //getting the xml file and then getting the ad images online to display as splah ads.
 }
 else {
//or launch the main interface if there's no connectivity.
  [self DisplayTabbar];
 }
}

ありがとう。

4

2 に答える 2

5

時間がかかる初期化がある場合は、( 経由でperformSelectorInBackground:withObject:) 新しいスレッドで実行することをお勧めします。UI は「ロックされた」状態で開始されます。UI を「ロック解除」するメソッドを作成します。バックグラウンド メソッドの最後のアクションとして、 を介してそのロック解除メソッドを実行しますperformSelectorOnMainThread:withObject:waitUntilDone:

実行ループが iOS イベントに応答できるように、メイン スレッドをブロックしないことが重要です。sleepそのため、他のブロックするものを避ける必要があります。ただし、別のスレッドでブロックしても問題ありません。また、イベントベースのプログラミング手法を適応させることも大いに役立ちます。

アップデート:

現在では、 のdispatch_async代わりに使用する方が適切ですperformSelectorInBackground:withObject:。メモリリークを避けるためNSAutoreleasePoolに、ブロック内にnew を作成する必要があります。dispatch_async

于 2011-01-17T11:04:26.383 に答える
1

ウォッチドッグがアプリを強制終了している場合、ロードに時間がかかりすぎて、ユーザーがそれを待つことはないと思います。いくつかのメモリ管理手法を調べてください。プロジェクトをより適切に構成する必要がある場合があります。

アプリを強制終了しないようにウォッチドッグに指示する方法があるかもしれませんが、ロード時間がユーザーを苛立たせ、アプリで必要なアウトリーチを得られないことは保証します.

于 2011-01-17T11:11:15.763 に答える