2011-10-05 35 views
7

在我的iPhone应用程序,我得到了几个地方,我可以做一个如何检查是否有一个performSelector:等待执行?

[object performSelector: withObject: afterDelay:]

电话。所有导致相同的方法。现在,在该方法中,我只想在最新的调用中执行一些代码。如果是第一个,我可以做[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(thisMethod) object:nil],并确保它被调用一次。

但是,有没有办法告诉如果有任何其他的方法调用等待被执行?

我可以用在这个类的计数器,我将我的每个延迟设置在此之后进行,然后在每次通话开始递减它且仅当该计数器归零执行代码的时间增加。但我想知道,如果这是最好的/可接受的方法...

回答

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:]只是[自performSelectorOnce:withObject:afterDelay:]取代它;

如果你想使用这个在多个对象比你实际上可以创建一个NSObject类,并添加方法那里。

让我知道这是否适合你。

+0

,如果你只是想忽略连续通话,而无需修改第一个计划一个什么?例如调用来更新表视图。 – Rivera

相关问题