web-dev-qa-db-ja.com

NSURLConnectionのXcode 4警告「式の結果は使用されていません」

いつものデータ転送をしようとしています。 NSMutableURLRequestを定義してから呼び出します

[[NSURLConnection alloc] initWithRequest:request delegate:self];

これはXcode 3では問題ありませんでしたが、Xcode 4はその行で「Expression result未使用」について警告します。リクエストは機能しますが、警告を取り除く方法を見つけたいです。

接続を変数に格納できると思いますが、実際には必要ありません。次の行をnilに設定するポイントがわかりません(ただし、これにより警告が削除されます)

注:Xcode 4であるか、事実ARCが有効になっているかどうかは100%わかりません。

71
Johann

関数が不要な結果を返す場合、コンパイラの警告を排除するためにvoidにキャストできます。

(void) [[NSURLConnection alloc] initWithRequest:request delegate:self];

私はまだARCを使用していないので、これが良いアイデアであるかどうかは言えません。ARCの前に、このポインタの結果をどこかに保持して、リリースできるようにする必要があります。

181
progrmr

progrmrの答えは正しいですが、それを行うためのさらにクリーンな方法があります。

[NSURLConnection connectionWithRequest:request delegate:self];

結果をvoidにキャストしなくても、これにより警告は発生しません。

33
Elliot

誰かがそのNSURLConnectionに責任を持つべきです。接続を保存する必要はありませんが、保存する場合はコーディングの方が優れています。問題は、あなたのNSURLConnectionを作成した後、誰もその作成されたインスタンスへのポインタを持っていないということです。

次の例を想定してみましょう。

  1. ClassAのインスタンスはNSURLConnectionのインスタンスを作成しています
  2. ClassAのインスタンスが解放され、割り当て解除されています
  3. NSURLConnectionはまだ生きており、割り当て解除されたインスタンスにデリゲートを起動します。

この問題を解決するには、NSURLConnectionのインスタンスを保存し、ClassAのインスタンスの割り当てが解除された場合、その接続を解放して、NSURLConnectionのインスタンスの割り当てを解除する必要があります。

3
thomas