如何检查是否有一个performSelector:等待执行?

8
在我的iPhone应用程序中,我有几个地方可以执行 [object performSelector: withObject: afterDelay:] 调用。所有的调用都引导到同一个方法。现在,在这个方法中,我想只在它最新的一次调用上执行一些代码。如果是第一次调用,我可以使用[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(thisMethod) object:nil]来确保它只被调用一次。
但是,是否有一种方法可以告诉我是否还有其他等待执行的方法调用呢?
我可以在这个类中使用一个计数器,每次设置此延迟后增加它,然后在每次调用之前将其减少,并且只有在此计数器为零时执行代码。但我想知道这是否是最好/可接受的方法...
1个回答

6

那么你可以这样做:每次调用[object performSelector: withObject: afterDelay:]时,只需在其上面添加你提到的行即可。你甚至可以创建一个方法来为你处理它。例如:

- (void)performSelectorOnce:(SEL)selector withObject:(id)object afterDelay:(NSTimeInterval)delay
{
    [NSObject cancelPreviousPerformRequestsWithTarget:object selector:selector object:object];
    [self performSelector:selector withObject:object afterDelay:delay];
}

如果您想使用 [object performSelector: withObject: afterDelay:],只需将其替换为 [self performSelectorOnce: withObject: afterDelay:]。

如果您想在多个对象中使用此方法,可以创建一个 NSObject 类别并在其中添加该方法。

如果这对您有用,请告诉我。


如果您只想忽略连续的调用而不修改第一个已安排的调用怎么办?例如,更新表视图的调用。 - Rivera

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接