gpt4 book ai didi

iPhone-scheduledTimerWithTimeInterval 是否保留 userInfo 参数?

转载 作者:行者123 更新时间:2023-12-03 16:25:20 26 4
gpt4 key购买 nike

在那段代码中,我有两个 NSLog 都表示 dict 的保留计数为 1。由于如果数组中有很多对象,计时器可能会在很长一段时间内触发,我可以保留给用户信息的字典吗?因为我猜它是自动释放的,而scheduledTimerWithTimeInterval似乎没有保留它。

理论上?实际上?

- (void) doItWithDelay
{
NSArray* jobToDo = /* get an autorelease array */

NSTimeInterval nextLaunch = 0.1;
int i=1;

for (NSDictionary* dict in jobToDo) {
NSLog(@"dict %d has %d retain count", i++, [dict retainCount]);

// HERE [dict retain] ???
[NSTimer scheduledTimerWithTimeInterval:nextLaunch target:self selector:@selector(doIt:) userInfo:dict repeats:NO];
nextLaunch += 1.0;
}
}

- (void) doIt:(NSTimer*)theTimer
{
NSDictionary* dict = [theTimer userInfo];

NSLog(@"dict has now %d retain count", [dict retainCount]);

// Do some stuff with dict
}

最佳答案

Apple NSTimer 文档说它将保留 userInfo。以下引用自文档...

The object you specify is retained by the timer and released when the timer is invalidated.

你的第二个 NSLog 说 1,所以我猜它已经被自动释放了,但计时器仍然保留它。

编辑:正如 bbum 所建议的,我们不应该依赖保留计数。所以我们很幸运,文档清楚地说明了这一点。

关于iPhone-scheduledTimerWithTimeInterval 是否保留 userInfo 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6886667/

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