0

渡されたいくつかの変数に基づいてリクエストを作成するクラスがあります。このクラスには、データを受信するためのすべてのデリゲート メソッドもあり、呼び出し元のクラスが取得できるようにデータをプロパティに格納します。

クラスが初期化されると、接続が作成され、それ自体が返されます。

NSURLConnection *connection;
if (self = [super init]) {
    self.delegate = theDelegate;
    ...some code here...
    connection = [[NSURLConnection alloc] initWithRequest:theRequest  delegate:self  startImmediately:YES];
}
return self;

そのため、正常にリリースできず、自動リリースするとクラッシュします。解放するのは呼び出し元のクラスの仕事ですか?もしそうなら、初期化されたオブジェクトを解放するだけで接続も解放されますか、それとも具体的に解放する必要がありますか? もしそうなら、あなたはどうしますか?

ありがとう

4

3 に答える 3

3

インスタンスconnection変数を作成し、オンデマンドでリリースします。「誰」がオブジェクトを解放すべきかという問題は、オブジェクトのセマンティクスと階層に厳密に依存します。

于 2010-03-15T00:08:38.427 に答える
0

なぜNSURLConnectionコンストラクタ内で開くのですか?

通常、コンストラクターはこの種の作業を実行すべきではありません。接続がオブジェクトに関連付けられている場合は、connectionオブジェクトのプロパティを[connection release];オブジェクトのdeallocメソッド内に作成します。

于 2010-03-15T00:08:16.890 に答える
0

すべての信頼を Clang に委ねるべきではないことを忘れないでください。偽陰性と偽陽性を報告でき、報告します。

Clang は日々改善されていますが、現時点ではまだ初期段階です。Xcode とうまく統合されているのは素晴らしいことですが、いくつかの欠陥があることに注意してください。

この場合、接続オブジェクトを格納している変数のスコープに依存します。インスタンス変数として宣言されている場合は、dealloc または他の時点で解放する限り、問題ありません。終わりました。

質問に投稿したように、の宣言がconnectioninit メソッドに対してローカルである場合、Clang はリークを正しく報告しています。インスタンス変数またはプロパティを作成connectionし、dealloc で、または使い終わったときに必ず解放する必要があります。

于 2010-03-15T00:10:11.463 に答える