2

他の誰かがASIHTTPRequestでこの問題を抱えていますか?デリゲートがインスタンスに設定されているバックグラウンドスレッド内から非同期リクエストを実行すると、リクエスト(NSOperationQueueに入れられる)がコールバックを返す前にデリゲートを解放できるため、問題が発生する可能性があります。

ASIHTTPRequestはデリゲートを保持していないようですが、AppleのNSURLConnectionはデリゲートを保持しています(「NSURLConnectionは初期化時にデリゲートを保持します。接続の読み込みが完了するか、失敗するか、キャンセルされると、デリゲートを解放します。」) 。

これを機能させるには、(非同期リクエストの代わりに)バックグラウンドスレッドで同期ASIHTTPRequestsを実行する必要がありますか?または、ASIHTTPRequestをダンプする必要がありますか?それとも私はただ狂っていますか?

4

2 に答える 2

7

ASIHTTPRequestのごく最近のバージョンを使用していると仮定すると、それを操作する(そしてクラッシュを回避する)正しい方法は次のとおりです。

デリゲートはリクエストを保持する必要があります(リクエストはデリゲートを保持しないでください)

デリゲートが破棄された場合(またはリクエストをキャンセルしたい場合)、デリゲートは次のことを行う必要があります。

[request setDelegate:nil];    
[request cancel];
[request release];

この方法でクラッシュすることはありません。(これらの問題のいくつかを回避するために、数か月前にASIHTTPRequestのデリゲート処理を書き直しました。これが正しい処理方法であることをAppleの人々に確認してから、変更を加えました。変更はすべて公式のASIHTTPRequestリポジトリにあります。 githubでは、それ以来公式リリースはありませんが、つまり、これらの変更はv1.7リリースには含まれていないため、v1.7以前では、上記のアドバイスに従うとクラッシュが発生する可能性があります。)

于 2010-10-07T07:46:34.367 に答える
0

ASIHTTPRequestsがオブジェクトを保持していないかどうかはわかりませんが、実行時にオブジェクトを保持し、最後に解放しようとしましたか?

この非常に優れたラッパーでまだ問題は発生していません^^

于 2010-10-06T07:40:08.440 に答える