回答:それは依存しています。私はあなたのself.imageConnection
プロパティが保持するように設定されていると仮定しています。
Automatic Reference Counting(ARC)が有効になっている場合、コンパイラがあなたのメモリ管理を担当するため、実際に違いはありません。 release
に電話をかけることができないため、ARCを有効にして、2番目の例を使用するだけでした。
ARC以外の環境では、大きな違いがあります。投稿した最初の方法では、メモリが正しく解放され、2番目の方法ではそれがリークします。
説明すると、プロパティをretain
と宣言すると、その名前が示すように、それが保持されます。 NSURLConnection
を作成するときに/ initを割り当てます。これは一度保持されます。その後、self.imageConnection
に割り当てます。これにより、保持カウントが再度インクリメントされます。
最初の例では、一時変数を使用しました。つまり、プロパティを割り当てたら、releaseを呼び出して保持カウントを「正規化」することができます。しかし、2番目の例では、一時的な変数はありません。参照を忘れてしまい、それを2回保持していたプロパティに代入します。これを解決するには
は、あなたがプロパティを割り当てるときに、このように、autorelease
ステートメントを追加することです:
self.imageConnection = [[NSURLConnection alloc] initWithRequest: [NSURLRequest
requestWithURL: [NSURL URLWithString:appRecord.imageURLString]] delegate:self]
autorelease];
...またはあなたがちょうどあなたがあなたの最初の例で示して何をすべきか、一時的に使用することができます変数。
すべてプロパティ - プロパティを宣言すると、そのプロパティを保持( '保持')するか、ポインタ(「割り当て」)またはコピー( 'コピー')します。割り当てられたプロパティにはこの問題はありません。
出典
2012-02-24 10:33:23
lxt