【问题标题】:How to check if there's a performSelector: waiting to be executed?如何检查是否有 performSelector: waiting to be executed?
【发布时间】:2011-10-05 09:59:12
【问题描述】:

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

[object performSelector: withObject: afterDelay:]

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

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

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

【问题讨论】:

    标签: iphone objective-c cocoa-touch cocoa performselector


    【解决方案1】:

    你可以这样做:只要你打电话给[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 类别并在那里添加方法。

    让我知道这是否适合你。

    【讨论】:

    • 如果您只想忽略连续调用而不修改第一个预定调用怎么办?例如调用更新表视图。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-26
    • 1970-01-01
    • 2022-11-16
    • 2022-11-20
    • 2019-03-22
    • 2012-07-29
    • 2013-06-10
    相关资源
    最近更新 更多