4

現在、iPhone 用アプリのメモリ リークを探しています。私は Instruments を使用して、リークの原因となっているコードを追跡しています (ますます Instruments の友人になっています!)。これで、Instruments に 2 つの線が表示されます。1 つは濃い青色 (行 146) で、もう 1 つは明るい青色 (150) です。いくつかの試行錯誤から、それらは何らかの形で接続されていることがわかりましたが、Objective-C とメモリ管理についてはまだ十分に理解できていません。

異なる色が使用される理由と、私の問題の可能性を知っている人はいますか?

numberForArray を解放しようとしましたが、ピッカー ビューで最後の行を表示するとアプリがクラッシュします。

すべてのアイデアに感謝します!

代替テキスト

(これを投稿すると、139行目が冗長であることにも気付きます!そこを見てください、すでに改善されています;-)

4

2 に答える 2

3

では、このコードのオブジェクトの割り当て/所有権の動作を見てみましょう...

numberForArray-NSString stringWithFormat:自動解放されたオブジェクトであるの結果が割り当てられます。それはあなたがそれを解放したくないことを意味します(あなたが発見したように)。

次に、そのオブジェクトがglucoseLoaderNSMutableArrayに追加されretainます。100回ループし、100個のオブジェクトを作成し、それらをに追加しますglucoseLoader。がglucoseLoader解放されると、154行目で、それに追加されたすべてのオブジェクトも解放されます。

しかし、待ってください。それだけではありません。を使用してfirstComponentRange作成されます。これを行うと、ソース配列のすべての要素が宛先に追加され、それらが再び保持されます。glucoseLoader-NSArray initWithArray:

では、いつ/どのようにリリースしfirstComponentRangeますか?

于 2010-05-31T03:42:58.647 に答える
0

Instruments は、firstComponentRange がリリースされていないことを伝えています (小さなリーク)。配列はその内容を保持するため、100 個の NSString インスタンスもリークし、暗い帯で示される行に割り当てられます (より重大なリーク)。

于 2010-05-31T04:13:06.967 に答える