NSTimer泄漏内存(CFArray?)

时间:2013-03-01 04:10:56

标签: ios memory-leaks nstimer

在测试我的应用程序内存泄漏时,我发现每当我以一个间隔启动NSTimer时,它会显示CFArray(store-deque)和CFArray(可变变量)的大小不断增长。在我的实际应用程序中,Malloc 16和Malloc 32等的大小与CFArray一起增加。

问题:如何阻止这种“泄漏”?

代码:.h

@interface ViewController : UIViewController
{
    NSTimer *timerClock;
    int timer;
}
@end

代码:.m

- (void)viewDidLoad
{
    [super viewDidLoad];

    timer = 0;
    timerClock = [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(counter) userInfo:nil repeats:YES];
}

- (void)counter
{

}
@end

1 个答案:

答案 0 :(得分:5)

当您解雇视图控制器时,您是否看到了这个?我问这个是因为重复的NSTimer保留了对其target的强引用,如果你在解除视图控制器时没有invalidate计时器,你会泄漏计时器和控制器本身,因为你将在控制器和NSTimer之间有一个强大的参考周期(又名retain cycle)。

顺便说一下,不要在控制器的invalidate方法中尝试dealloc,因为强引用周期后,dealloc永远不会被调用。人们通常会invalidate viewDidDisappear。而且,很明显,如果您要invalidate viewDidDisappear viewDidAppear计时器,您可能应该在viewDidLoad而不是invalidate创建计时器,以确保平衡使用{{1}}调用创建计时器。