gpt4 book ai didi

ios - NSTimer 内存泄漏(CFArray?)

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:23:11 26 4
gpt4 key购买 nike

在测试我的应用程序是否存在内存泄漏时,我发现每当我以间隔启动 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com