7

在我的 iPhone 应用程序中,我有几个地方可以做

[object performSelector: withObject: afterDelay:]

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

但是,有没有办法判断是否还有其他方法调用等待执行?

我可以在此类中使用一个计数器,每次在延迟后设置此执行时我都会递增,然后在每次调用开始时递减它,并且仅在此计数器为零时才执行代码。但我想知道这是否是最好/可接受的方法......

4

1 回答 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 类别并在那里添加方法。

让我知道这是否适合您。

于 2011-10-05T10:14:54.617 回答