如何在Objective-C中合并延迟/延迟呼叫?

时间:2010-06-03 17:22:34

标签: objective-c iphone cocoa cocoa-touch

我想确保“最终”执行某些维护任务。例如,在我检测到某些资源可能不再用于缓存之后,我可能会调用:

[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];

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

对于您想要的内容,没有真正的内置支持。如果这在你的程序中很常见,我会创建一个trampoline类来跟踪它是否已经被安排向给定对象发送消息。它不应该超过20行代码。