0

デリゲートのプロパティ「assign」と「retain」

'assign'を使用する方が良いことは知っていますが、retainを使用する方が良い場合に備えています。

RKRequestオブジェクトを作成してWebサービスを呼び出します。

RKRequest *request = [[RKClient sharedClient] get:urlString delegate:self];

リクエストオブジェクト自体はシングルトンリクエストキューによって保持および管理されるため、リクエストオブジェクトは気にせず、デリゲートメソッドのみを気にします。

リクエスト結果を処理するメソッドがあります。


これらのコードはUIViewControllerにあり、ViewController自体がデリゲートです。

要求の処理中にビューコントローラがdeallocになると、デッドポインタであるRKRequest呼び出しデリゲートとプログラムがクラッシュします。

したがって、ビューコントローラがdeallocの場合、RKRequestを保持し、nilをデリゲートに割り当てる必要があります。

さらに、リクエストが成功または失敗したときにRKRequestを解放する必要があります。


しかし、RKRequestが「保持」ポインターとしてデリゲートポインターを持っているとは思わないのですが、どうすればこれらのオブジェクトを美しく管理できますか?

4

1 に答える 1

4

必要なのは、コントローラー(RKRequestDelegate)のdeallocメソッドに次の呼び出しを追加することだけです。

[[RKRequestQueue sharedQueue] cancelRequestsWithDelegate:self];
于 2011-07-29T20:53:45.740 に答える