2013-11-24 6 views
5

私は初めてインストゥルメントを使用していますが、私はmain.mと思われるメモリリンクを持っています。問題を解決するために問題をどのようにターゲット設定できますか?私はARCを使用しているので、メインにエラーがあると私は驚いていますか?何がこれにつながる可能性がありますか?私はmain.mにメモリリークを持っていますが、何が原因でしょうか?

enter image description here

答えて

5

リークがmainの子孫です。

Instruments wrt leakを使用しているWWDCビデオを見るのが賢明でしょう。表示されている情報より多くの情報を得ることができます。

リークは、リークされたメモリが割り当てられた場所を示し、リークはリリースがないために表示できないため、表示されません。

ARCを使用する際の一般的な原因の1つが保持サイクルです。おそらくデリゲート・プロパティーは強固であり、保持サイクルを引き起こして弱いです。 Ex:Object-AはObject-Bをインスタンス化します。オブジェクトBは、強いプロパティを持つオブジェクトCをインスタンス化します。 Object-Cは、Object-Bを指す強力なプロパティデリゲートを作成します。 Object-AはObject-Bを解放しますが、Object-BはまだObject-Cに強いポインタがあるため、解放できません。 Object-CはまだオブジェクトBに強いポインタがあるため、割り当てを解除できません。この時点で、それぞれが他のものを割り当て解除すること、つまり保持サイクルを維持しています。答えは、Object-CはObject-Bに弱点があるはずです。

あなたの使命は、漏れているオブジェクトを掘り下げて見つけ出し、それがなぜ解放されていないのかを理解することです。これは何度も困難です。

+0

ありがとうございました。何が悪いですか。リンクはアプリにどのような影響を与えますか?私はシムとデバイスの両方で2週間アプリをテストしてきましたが、全く問題はありません。それは起こるのを待っている時の爆撃ですか? – DevC

+2

別の質問です。使用に伴って成長しない場合は、わずかな漏れが1つまたは少数しか許容されない場合があります。あなたのアプリは、バックグラウンドで生き続けるため、再起動せずに長時間生きている可能性があることに注意してください。しかし、すべてのリークを排除することが最善です。すべてのプログラミングエラーです。最後に、アナライザーを実行してすべての警告を修正します。 – zaph

+0

これをクリアしていただきありがとうございます。アプリケーションの開始時に唯一のリークですが、ユーザーの介入なしに数秒で終了します。 – DevC