2012-01-21 3 views
5

私はiOS 5とARCを初めて使用しています。メモリリークに対するAutomatic Reference Counting(ARC)の影響

プロジェクトでARCを使用すると、メモリリークがまったく発生しないことを意味しますか?

ARCを使用する場合、メモリリークとNSZombiesを検出するためにInstrumentsを使用する必要がありますか?

+0

いいえ、ARCはメモリリークを完全になくしません。 [Objective-Cの自動参照カウントはどのような種類のリークがXcode 4.2で防止/最小化していないのですか?](http://stackoverflow.com/questions/6260256/what-kind-of-leaks-does-objective-cs)を参照してください。 xcode-4-2で自動カウントする) - – BoltClock

答えて

5

ARCを使用すると、特定のタイプのリークを排除するのに役立ちます。これは、またはautorelease個のオブジェクトを忘れないためです。例えば、このタイプのエラーはできなくなる:

myLabel.text = [[NSString alloc] initWithFormat:@"%d", 17]; 
// oops, just leaked that NSString! 

しかしながら、ARCは、保持サイクルによって生じる漏れを排除しないであろう。弱い参照を使用するか、手動でサイクルを破棄してリークする前に、保持サイクルを排除することは、依然としてあなた次第です。たとえば、ブロックの使用を開始するにつれて、ブロック/自己保持サイクルがより一般的になります。 Transitioning to ARC Release Notesでは、弱い参照を使用してこれらのサイクルを回避する方法について説明しています。

+1

ARCを理解したい場合は、[WWDC 2011](https://developer.apple.com/videos/wwdc/2011/)の「Automatic Reference Countingの紹介」ビデオを強くお勧めします。 –

+0

この質問のような状況で私は何ができますか?http://stackoverflow.com/questions/21423309/memory-leak-in-nsstring-stringwithutf8string-with-arc-enabled – deltaaruna

0

いいえ、メモリリークの発生を防ぎません。参照カウントを使ってランタイムで何が起こるかは、コードが参照を捨てて、オブジェクトが解放されないことがあるということです。良いコードを書くのはあなた次第です。

+0

Ok。同じようにNSZombiesにも適用されますか? – meetpd

0

プロジェクトでARCを使用しても、メモリリークはまったくありません。

あなたのプログラムやライブラリでは、まだ漏れがあるかもしれません。また、ARCはObjCオブジェクトにのみ適用されます。オブジェクトオブジェクトではないヒープ割り当てを簡単にリークできます(例:malloc/new)。

ARCを使用する場合、メモリリークとNSZombiesを検出するためにInstrumentsを使用する必要がありますか?

はい。これまでの回答は、あなたのプログラムがこれらの問題から解放されないことが保証されない理由を詳述する必要があります。また、愚かなことをするとコンパイラが間違ってしまうことがあります。データを適切に保護しないと(例えば、同時実行)、問題を引き起こす可能性があります。

関連する問題