2011-01-17 3 views
2

私は無限ループではないと私はまだ読み込んでいるので、私のアプリを殺さないウォッチドッグに通知する適切な方法は何ですか? 00000020 例外コード:Iphone、ウォッチドッグが起動するのに長い時間がかかっているためにアプリケーションが強制終了されないようにするにはどうすればよいですか?

私は私のcrashlogsに 例外タイプを受信して​​い を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]; 
} 
} 

ありがとう。

答えて

5

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

実行ループがiOSイベントに応答できるようにメインスレッドをブロックしないことが重要です。そのため、sleepやその他のブロックするものは避けてください。しかし、別のスレッドでブロックすることは大丈夫です。また、イベントベースのプログラミング方法を適用することは、多くの手助けをします。

更新:

今日では、それはdispatch_async代わりのperformSelectorInBackground:withObject:を使用することをお勧めします。メモリリークを避けるには、dispatch_asyncブロック内に新しいNSAutoreleasePoolを作成する必要があります。

+0

私はそれを試してみます、私はスプラッシュ画面を取って、それをメイン画面として配置し、次にインジケータビューを追加します。あなたが言ったような背景のイメージの読み込みを実行し、次にあなたに戻ってくる。ありがとう、 – LolaRun

+0

スプラッシュ画面は問題ありませんが、何かが起こっていることを示すためにUIActivityIndi​​catorView(別名「スピナー」)を追加することをお勧めします。 – DarkDust

+0

。しかし、私はまたあなたがそれに遭遇したかもしれないと思った何か変わったことに気づいた。バックグラウンドで演技セレクターを呼び出すとき。私は '自己'インスタンスを使用しています。しかし、私は多くのエラーと漏れのコンソールで読んでいる! *** __NSAutoreleaseNoPool():NSURLクラスのオブジェクト0x773e360が、自動プールされずに自動プールされました。ちょうど をリークしました。他のクラスにはNSCFString、NSThread NSHTTPURLResponse ... あなたはどう思いますか? – LolaRun

1

ウォッチドッグがあなたのアプリを殺していると、ロードに時間がかかり、ユーザーがそれを待たずにいると思います。いくつかのメモリ管理テクニックを見て、プロジェクトをより良く構築しなければならないかもしれません。

ウォッチドッグにあなたのアプリを殺さないように指示する方法があるかもしれませんが、あなたの負荷時間がユーザーを苛立たさせ、あなたがあなたのアプリで必要な外出先を得られないことを保証します。

+0

メイン実行ループが30秒以内にiOSに報告しない場合、あなたのアプリを殺しています(私が思い出す限り)。メモリ管理とは何の関係もなく、メインスレッドをブロックしないことだけです。 – DarkDust

+3

アプリを開いて30秒間カウントすると、読み込みが完了するまで待つのはかなり長い時間です。メモリを管理してプロジェクトを再構成すると、メインスレッドが解放され、ロードが大幅に高速化されます。私の主張は、現在のところ、ユーザーはアプリのために30秒待つことを望んでいないということです。モバイルは瞬間的でポータブルであるということです –

関連する問題