我用仪器追踪内存泄漏。我总是得到负责的图书馆是基金会的信息。当我在我的代码中跟踪它时,我最终到了这里,但我的内存管理没有任何问题:
- (void)setupTimer {
// stop timer if still there
[self stopAnimationTimer];
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(step:) userInfo:nil repeats:YES];
self.animationTimer = timer; // retain property, -release in -dealloc method
}
属性animationTimer保留计时器。在-dealloc我发布它。
现在看起来像一个框架错误?我用iPhone OS 3.0和3.1检查过,每次使用NSTimer都会出现这个问题。知道还有什么可能是问题吗?
(我的内存泄漏扫描间隔是0.1秒。但同样的事情是5秒)
答案 0 :(得分:5)
请勿致电-[NSTimer dealloc]
。如初。
在这种情况下,-scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:
由-invalidate
平衡。您无需在计时器对象上调用-dealloc
或-release
。
答案 1 :(得分:3)
除非您的stopAnimationTimer
方法为invalidate
并release
'(然后设置为nil
)您的animationTimer
财产,否则您将泄露存储器中。
答案 2 :(得分:1)
我发现了:我对我的计时器有很强的参考价值。运行循环保留它。所以RC是2.但是因为Timer也拥有对目标的强引用(在我的情况下保留了定时器),我遇到了死锁情况。 -dealloc从未被调用过,因此我的计时器从未被释放过。 WTF。