1

私は、ある時点でユーザーがWebサービスからの適切な応答を待たなければならないアプリケーションに取り組んでいます。Webサービスからの手動確認が必要なため、これには時間がかかる場合があります。このため、リクエストのtimeoutIntervalは非常に高く設定されており、リクエストが早く終了するのを防ぎます。

プログラムがホーム画面に戻った直後にアプリケーションを起動すると、問題が発生します。アプリケーションが起動しない(黒い画面)のは、リクエストがリリースされておらず、まだ応答を待っているためだと思います(間違っているかもしれませんが)。

applicationWillTerminateメソッドを試しましたが、ホームボタンを押しても呼び出されません。繰り返しになりますが、これはアプリケーションがまだ応答を待っていることが原因である可能性がありますが、より良い説明をいただければ幸いです:)

また、誰かが何をすべきかについて何か考えを持っていますか?

コード:

NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:urlAdress]
                                                          cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                      timeoutInterval:10000];

    NSHTTPURLResponse* response = nil;  
    NSError* error = nil; 

    NSData *responseData = [NSURLConnection sendSynchronousRequest:theRequest   
                                                             returningResponse:&response   
                                                                         error:&error]; 
4

2 に答える 2

3

メインスレッドで同期リクエストを行うと、レスポンスを受信するかリクエストがタイムアウトするまで、実行ループ全体がブロックされます。この間、applicationWillTerminateを含め、何も呼び出されません。これを行うのは非常に悪い考えです。リクエスト用に別のスレッドをデタッチするか、非同期NSURLConnectionを作成する必要があります。

そうは言っても、OSはアプリを終了するときにとにかくすべてのメモリを解放するので、最後の起動からの何かが再起動時に「残される」可能性はほとんどありません。アプリの終了時にサーバーがクライアントを失ったためにサーバーがブロックされていない限り。その場合、いつでも発生する可能性があるため、このようなケースを処理できる方法でサーバーを作成する必要があります。

于 2010-03-01T14:40:25.157 に答える
0

applicationWillTerminateデリゲートメソッドが呼び出されない場合、

次に、次のデリゲートメソッドが呼び出されると思います。

- (void)applicationWillResignActive:(UIApplication *)application
{
  NSLog(@"Application Did Resign Active");
}
于 2010-07-16T01:51:39.987 に答える