2010-06-03 152 views
1

我想确保某些维护任务“最终”执行。例如,在我检测到某些资源可能不再用于缓存后,我可能会调用:如何合并Objective-C中的延迟/延迟呼叫?

[self performSelector:@selector(cleanupCache)withObject:nil afterDelay:0.5];

但是,可能有很多地方我检测到这一点,我不想连续调用cleanupCache。我想将多个调用合并到cleanupCache中,以便我们只定期获得一次对cleanupCache的调用。

下面是我想到的 - 这是最好的方法吗? (NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(cleanupCache)object:nil]; [self performSelector:@selector(cleanupCache)withObject:nil afterDelay:0.5];

回答

0

没有真正的内置支持你想要的东西。如果这在你的程序中很常见,我会创建一个蹦床类来跟踪它是否已经计划向给定对象发送消息。它不应该占用20多行代码。

+0

接受这个答案,因为这是痛苦的事实。最后,我添加了对缓存类的支持,基本上在原始问题中执行取消/执行顺序。 – thrusty 2011-06-02 16:46:29

0

而不是取消待处理的请求,如何保持跟踪?安排请求时设置一个标志,并在清理运行时清除它。

+0

我想我想知道的是:有没有办法让NSObject为我做这件事?显然,它已经在追踪延迟选择器排队的情况。 – thrusty 2010-06-03 17:35:50