使用 NSObject 确定挂起的操作
Determining pending operations with NSObject
我正在显示一个 UIView,其中包含一个按钮,让用户可以选择撤消某些操作。视图保持可见几秒钟,然后关闭。我正在创建如下视图:
[self performSelector:@selector(endUndoOption) withObject:self afterDelay:delay];
然后在必要时使用以下方法取消它:
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(endUndoOption) object:self];
有什么方法可以确定是否有预定的操作(在本例中为 endUndoOption)?或者如果计时器已经开始?目前我正在使用 BOOL 标志执行此操作,但想知道是否有一种方法可以检查是否有一个排队?谢谢!
如果你勾选Cocoa Pods (http://cocoapods.org) BlocksKit pod, http://zwaldowski.github.io/BlocksKit/,NSObject上有一个特殊的类别,有两个非常有用的方法:
+ (id)bk_performBlock:(void (^)(void))block afterDelay:(NSTimeInterval)delay;
其中returns一个id是取消句柄。
和
+ (void)bk_cancelBlock:(id)handle;
取消预定的演出。
因此,为了实现您的目标,您可以将取消句柄存储在某些 属性 中,例如
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)
{
...
}
我正在显示一个 UIView,其中包含一个按钮,让用户可以选择撤消某些操作。视图保持可见几秒钟,然后关闭。我正在创建如下视图:
[self performSelector:@selector(endUndoOption) withObject:self afterDelay:delay];
然后在必要时使用以下方法取消它:
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(endUndoOption) object:self];
有什么方法可以确定是否有预定的操作(在本例中为 endUndoOption)?或者如果计时器已经开始?目前我正在使用 BOOL 标志执行此操作,但想知道是否有一种方法可以检查是否有一个排队?谢谢!
如果你勾选Cocoa Pods (http://cocoapods.org) BlocksKit pod, http://zwaldowski.github.io/BlocksKit/,NSObject上有一个特殊的类别,有两个非常有用的方法:
+ (id)bk_performBlock:(void (^)(void))block afterDelay:(NSTimeInterval)delay;
其中returns一个id是取消句柄。
和
+ (void)bk_cancelBlock:(id)handle;
取消预定的演出。
因此,为了实现您的目标,您可以将取消句柄存储在某些 属性 中,例如
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)
{
...
}