1

今日はちょっとした問題に直面しました。漏れの理由を知りたかったのです。ここにコードがあります

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

これで問題なく動作します。

誰も解放していないので、この割り当てられたメモリ/オブジェクトに何が起こるのか疑問に思っていました。したがって、本能に従って、次のように割り当てながら autorelease を配置します。

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

これにより、「[NSURLConnectionInternalConnection _withConnectionDisconnectFromConnection]: 割り当て解除されたインスタンスにメッセージが送信されました」というエラーとクラッシュが発生しました

背後にあるコンセプトと理由を知りたかっただけです。

編集:私はARCを使用していません。

ありがとう。

4

3 に答える 3

1

メモリ管理を改善するために、ここでは autorelease を使用できないと思います。接続デリゲート メソッドで接続オブジェクトを解放してください。

 - (void)connectionDidFinishLoading:(NSURLConnection *)connection;
 {
     [connection release];
 }

したがって、接続が完了すると、接続オブジェクトが解放されるか、解放できます ni viewDidUnload も

于 2012-07-24T07:03:08.237 に答える
0

このメソッドを使用すると、メモリ管理を改善できます。 NSURLConnection *connection=[NSURLConnection connectionWithRequest:urlRequest delegate:self];

上記のconnectionWithRequestメソッドはクラスメソッドであり、メモリ自体を管理するため、解放する必要はありません。私の知る限り、接続オブジェクトを割り当てた後、objc ランタイムはオブジェクトを autoreleasepool に追加し、次に他のデリゲート メソッドを割り当て解除されたインスタンスに送信します。

于 2012-07-24T07:02:20.337 に答える
0

[NSURLConnectionInternalConnection _withConnectionDisconnectFromConnection]

this was called after the Autorelease Pool released your NSURLConnection connection object. Best way should be, have a reference for the variable and release it, once you are done fetching the data. (May be in the viewDidUnload: ?)

于 2012-07-24T06:59:16.583 に答える