在测试我的应用程序是否存在内存泄漏时,我发现每当我以间隔启动 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
最佳答案
当您关闭 View Controller 时,您看到了吗?我问这个是因为重复的 NSTimer
保持对其 target
的强引用,如果你在关闭 View Controller 时不 invalidate
计时器,你会泄漏定时器和 Controller 本身,因为你将在 Controller 和 NSTimer
之间有一个强引用循环(又名 retain cycle )。
顺便说一句,不要试图在 Controller 的dealloc
方法中invalidate
,因为在强引用循环中,dealloc
永远不会得到叫。通常人们会在viewDidDisappear
中invalidate
。而且,显然,如果您要在 viewDidDisappear
中使
您的计时器,您可能应该在 viewDidAppear
而不是 中创建它viewDidLoad
,以确保您平衡计时器的创建与其 invalidate
调用。
关于ios - NSTimer 内存泄漏(CFArray?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15150348/