2009-05-03 147 views
0

我有一个NSTimer将触发关每一秒,并且对第二我通过设置文本属性,像这样更新一个UILabel:UILabel内存泄漏?

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

它工作正常,但是当我在Xcode与开始运行,性能工具 - >泄漏,看起来内存只是在攀登攀爬攀爬。

从我的理解,字符串应该是autoreleased(虽然我从来没有看到内存减少,或停止增加)。

这是内存泄漏吗?有没有更好的方法可以做到这一点,以检查我的内存使用情况?

谢谢!

更新:代码来创建计时器如下:

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

代码清理在计时器完成如下:

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

什么问题呢?我认为一旦定时器结束,内存可能会被释放,但事实并非如此。

+0

您是否明确确定这条线是不断增长的记忆负责人(即评论它解决了问题)?也许你在其他地方泄漏。 – smorgan 2009-05-03 18:00:35

+0

是的,我确定这条线是有责任的。评论它解决了这个问题。 – user26218 2009-05-03 18:27:47

+0

虽然不相关,但我认为你过度释放timeTimer,因为你在创建它时不保留实例。 – 2009-06-10 16:52:53

回答

1

我认为问题在于我不了解性能工具。使用活动监视器运行不会增加内存使用量。

0

出于好奇,如果使用[remainingLbl setText:]而不是设置属性,问题是否仍然会发生?你的代码看起来很好...内存应该被清理,因为stringWithFormat autoreleases字符串。

另一个需要尝试的事情是:当你在Objective-C中创建线程时,你必须将所有的代码包装在一个NSAutoreleasePool中,以便在线程执行期间创建的东西被清除。这应该没有什么区别,因为应该已经存在 - 但它值得一试。