質問

毎秒起動するNSTimerがあり、その秒でtextプロパティを次のように設定して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;

これに何か問題がありますか?タイマーが終了するとメモリは解放されると思いましたが、そうではありません。

役に立ちましたか?

解決

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

他のヒント

好奇心から、プロパティを設定する代わりに[remainingLbl setText:]を使用すると、問題は発生しますか?コードは正常に見えます... stringWithFormatが文字列を自動解放するため、メモリをクリーンアップする必要があります。

もう1つ試してください。Objective-Cでスレッドを作成する場合、すべてのコードをNSAutoreleasePoolにラップして、スレッドの実行中に作成したものがクリーンアップされるようにする必要があります。既に存在するはずなので、ここで違いはありませんが、一見の価値があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top