ios - NSTimer 内存泄漏(CFArray?)

标签 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

最佳答案

当您关闭 View Controller 时,您看到了吗?我问这个是因为重复的 NSTimer 保持对其 target 的强引用,如果你在关闭 View Controller 时不 invalidate 计时器,你会泄漏定时器和 Controller 本身,因为你将在 Controller 和 NSTimer 之间有一个强引用循环(又名 retain cycle )。

顺便说一句,不要试图在 Controller 的dealloc方法中invalidate,因为在强引用循环中,dealloc永远不会得到叫。通常人们会在viewDidDisappearinvalidate。而且,显然,如果您要在 viewDidDisappear使您的计时器,您可能应该在 viewDidAppear 而不是 中创建它viewDidLoad,以确保您平衡计时器的创建与其 invalidate 调用。

关于ios - NSTimer 内存泄漏(CFArray?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15150348/

相关文章:

C 内存泄漏,在 while 循环中连接

ios - 如何将计时器移至后台线程

ios - 如何在后台线程中准备UI?

ios - Apple Store 预览和屏幕截图

ios - 从 App Delegate 呈现 View Controller

ios - 设置 UILabel.text 属性会导致线程中的内存泄漏

iphone - 即使在后台,如何让 AVAudioPlayer 在 30 分钟后停止播放背景音乐?

ios - 二元运算符 '<^>' 不能应用于类型的操作数

java - 通过 MAT 了解内存泄漏

c++ - 分配指针时发生内存泄漏