gpt4 book ai didi

objective-c - NSTimer保留计数增加,为什么?

转载 作者:行者123 更新时间:2023-12-01 19:26:22 24 4
gpt4 key购买 nike

我有关于NSTimer的问题。请参阅以下代码:

NSTimeInterval timeInterval = 1.0f;
SEL selector = @selector(executeDataRefresh);

NSMethodSignature *methodSignature = [[ExecuteDataRefesh class] instanceMethodSignatureForSelector:selector];

NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:methodSignature];
[invocation setTarget:executeDataRefresh];
[invocation setSelector:selector];

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval: timeInterval invocation:invocation repeats:YES];

现在,每次调用 executeDataRefresh方法时,对象 executeDataRefresh的保留计数将增加1。因此,一分钟后,保留计数为60。

我知道不应该使用 retainCount方法,但是这种方法真的是“不正确的”吗?

怎么会?

最佳答案

NSInvocation保留了它的目标,因为它需要目标在计时器启动时仍然存在。这个事实已经埋在 -[NSInvocation retainArguments] 的文档中:

如果接收者尚未这样做,请保留目标[...]
NSTimer始终指示其NSInvocation保留其参数,因为NSTimer触发之前通常会有延迟。

这就是当有人说“框架类可能在您不知情的情况下保留东西”时的意思。关于Don't worry

您可能要担心的是,*事实是,每次运行此代码(您似乎指示的情况经常发生)时,您正在创建一个新的NSInvocation并重复使用与上次属性完全相同的NSTimer实例,这似乎是浪费内存。

*除非这只是测试代码。

关于objective-c - NSTimer保留计数增加,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7309533/

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