2011-06-24 5 views
0

非常に非特異的なタイトルのために申し訳ありませんが、私はリークだけで私のプログラムをデバッグしていると私は、次のコードの数行に漏れが見つかりました:私は数バイトのリークがあります - なぜですか?

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; // LEAKS shows 80% 
[dateFormat setDateFormat:@"EEE-dd-MMMM-yyyy"]; 
NSDate *today = [[NSDate alloc] init]; // LEAKS shows 20% 
NSString *theDate = [dateFormat stringFromDate:today]; 

[noteBookContent replaceObjectAtIndex:(currentPageCounter*3)+1 withObject:theDate]; 

[dateFormat release]; 
[today release]; 

漏れは1行が80%の漏れであることを私に伝え、残りの20%。しかし、なぜ?私は両方を解放しています...

それはわずか16バイトなので、私は心配する必要はないと思います...または私はこのようなものについて心配すべきですか?とにかく、なぜ私のコードが漏れているのか分からないので、どんな助けでも大歓迎です。ありがとう!

また、私たちはLEAKSについて話していますが、「Malloc 32 Bytes Foundation - [NSCFString appendString:]」のような私のプログラムにもいくつかのLeakedブロックがあります... LEAKSは私に与えませんこれが漏れているはずの私のコードへの参照。この記憶がどこから漏れているのか、私はどうやって調べるのですか?

申し訳ありませんこれはすべて基本的なものですが、おそらく収集できるように、私がLEAKSを使用しているのは初めてです。

ありがとうございます!

答えて

2

すぐにオブジェクトを解放していて、それ以上のアクションを実行していない場合は、方法を変更したいと思います。 auroreleasedオブジェクトを使用して、このアプローチを試してみてください:

NSString *theDate = [NSDateFormatter localizedStringFromDate:[NSDate date] 
                dateStyle:@"EEE-dd-MMMM-yyyy" 
                timeStyle:nil]; 
[noteBookContent replaceObjectAtIndex:(currentPageCounter*3)+1 
          withObject:theDate]; 

*ノートでは、私は正確性または漏れのこのコードをチェックしていないが、それはまったく同じことを行う必要があります。

0

theDateもリリースする必要がありますか?

+0

私はtheDateを割り当てなかったので、これは解決策ではないと思います。私がそれをリリースすると、アプリケーションがクラッシュします。 –

+0

あなたは正しいです。オブジェクトのメモリを解放する必要があるのは、NEW、ALLOC、RETAIN、COPYのいずれかのキーワードを使用して初期化するときだけです。「NARC」を覚えておいてください。 – markrickert

1

自動リリースの初期化ツールを使用してください。例えば、代わり

date = [[NSDate alloc] init]; 

使用

date = [NSDate date]; 

等を使用します。

私がオートリリースの初期化子を使用すると、リークメッセージが表示されません。

関連する問題