Ios 使用NSObject确定挂起的操作

Ios 使用NSObject确定挂起的操作,ios,objective-c,nsobject,Ios,Objective C,Nsobject,我正在显示一个UIView,其中包含一个按钮,用户可以选择撤消某些内容。视图保持可见几秒钟,然后关闭。我创建的视图如下所示: [self performSelector:@selector(endUndoOption) withObject:self afterDelay:delay]; 然后,如有必要,使用以下命令取消该操作: [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(endUndoOp

我正在显示一个UIView,其中包含一个按钮,用户可以选择撤消某些内容。视图保持可见几秒钟,然后关闭。我创建的视图如下所示:

[self performSelector:@selector(endUndoOption) withObject:self afterDelay:delay];
然后,如有必要,使用以下命令取消该操作:

[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(endUndoOption) object:self];
有没有办法确定是否有计划的操作(在本例中为endUndoOption)?或者计时器是否已经开始?目前,我正在使用BOOL标志执行此操作,但我想知道是否有方法检查是否有一个队列?谢谢

如果您检查Cocoa Pods()BlocksKit pod,NSObject上有一个特殊的类别,有两个非常有用的方法:

+(id)bk_performBlock:(void(^)(void))块后延迟:(NSTimeInterval)延迟

返回一个id,该id是取消句柄

+(void)bk_cancelBlock:(id)句柄

取消预定的演出

因此,为了实现您的目标,您可以将取消句柄存储在某些属性中,例如

self.endUndoCancellationHandle = [[self class] bk_performBlock:^{ 
                                              [self endUndoOption];
                                              self.endUndoCancellationHandle = nil;
                                          } afterDelay:delay]; 
然后取消:

if (self.endUndoCancellationHandle)
{
     [[self class] bk_cancelBlock:self.endUndoCancellationHandle];
     self.endUndoCancellationHandle = nil;
}
要检查是否安排了某些内容,只需检查您当前是否拥有句柄:

if (self.endUndoCancellationHandle)
{
...
}