2009-05-03 9 views
0

私は毎秒をオフに発射し、その第二に、私はそうのようなテキストプロパティを設定することでUILabelを更新NSTimerを持っている:UILabelのメモリリーク?

remainglbl.text = [NSString stringWithFormat:@"%i:%02i", var1, var2]; 

それは正常に動作しますが、私はパフォーマンスでスタートとXcodeでそれを実行するとツール - >リーク、それはメモリがちょうど登山や登りや登りを続けているようです。

私の理解では、文字列は自動リリースする必要があります(ただし、メモリが減少することはありませんが、増加を止めることはできません)。

これはメモリリークですか?メモリ使用量をチェックするためにこれを行うより良い方法はありますか?

ありがとうございます!

更新:次のようにタイマーを作成するためのコードは次のようにタイマー終了時のクリーンアップに

timeTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(changeTime:) userInfo:nil repeats:YES]; 

コードは次のとおりです。

[timeTimer invalidate]; 
[timeTimer release]; 
timeTimer = nil; 

これに何か問題?私は、タイマーが終了するとメモリが解放されるかもしれないと思ったが、それはしない。

+0

あなたは、この行がメモリの増加を引き起こす原因であることを明確に決定しましたか(つまり、それをコメントアウトすると問題が解決されます)。おそらくあなたはどこか別の場所に漏れているでしょう。 – smorgan

+0

はい、私は決定的にこの行が原因であると判断しました。それをコメントアウトすることで問題は解決されます。 – user26218

+0

関係はありませんが、インスタンスを作成するときにインスタンスを保持しないため、timeTimerが過剰にリリースされていると思います。 –

答えて

1

私はパフォーマンスツールを理解していないという問題があったと思います。アクティビティモニターで実行しても、メモリ使用量は増加しません。

+0

「Total Allocations」は、リリースされていても、ある時点で割り当てられたメモリの量です。 "Net Allocations"は、現在のメモリ使用量です。 Leaksツールでは、どのオブジェクトが漏洩しているかを具体的に示す必要があります。 –

0

ちょうど好奇心から、プロパティを設定する代わりに[remainingLbl setText:]を使用すると問題は解決しますか?あなたのコードは正常に見えます... stringWithFormatが文字列をオートレースするので、メモリをクリーンアップする必要があります。

もうひとつ試してみましょう:Objective-Cでスレッドを作成するときは、スレッドの実行中に作成したものがクリーンアップされるように、NSAutoreleasePoolのすべてのコードをラップする必要があります。すでに存在しているはずのように、ここで違いはありませんが、一発の価値があります。

+0

[remainingLbl setText:]はまったく同じ動作をします。 Re:NSAutoreleasePool - 私はそれが必要ではないと思ったので、私はAutoreleaseプールを設定していません。私のコードは、タイマーを作成し、それを削除する私は私のオリジナルの投稿に追加しました。 – user26218