使用方式
1.创建
LKAfterTask *task = [[LKAfterTask alloc]init1;
2.需要延时处理的事件
[task afterTask:^{
//此处为需要延时执行的方法
} withAfterTime:0.5];
3.处理,判断是否使用了延时方法
if ([task isUseAfterTask]) {
//使用了延时方法
}else {
//还未使延时方法
//需要取消使用
[task cancelAfterTask];
}
实现文件
#import <Foundation/Foundation.h>
@interface LKAfterTask : NSObject
/**
是否已经使用了延时的方法 使用返回YES,没有使用返回NO
@return 是或者不是
*/
-(BOOL)isUseAfterTask;
/**
调用这个方法已执行延时事件
@param action 需要执行的延时事件
@param time 需要执行的延时事件所需的时间
*/
-(void)afterTask:(void (^)(void))task withAfterTime:(NSTimeInterval)time;
/**
取消想要执行的延时事件
*/
-(void)cancelAfterTask;
@end
#import "LKAfterTask.h"
@interface LKAfterTask ()
@property (nonatomic, assign) BOOL useAfterTask;
@property (nonatomic, copy) dispatch_block_t loadWaitingTask;
@end
@implementation LKAfterTask
-(void)afterTask:(void (^)(void))task withAfterTime:(NSTimeInterval)time{
dispatch_block_t loadWaitingTask = dispatch_block_create(DISPATCH_BLOCK_BARRIER, ^{
self.useAfterTask = YES;
task();
});
_loadWaitingTask = loadWaitingTask;
dispatch_time_t delayTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(time * NSEC_PER_SEC));
dispatch_after(delayTime, dispatch_get_main_queue(), loadWaitingTask);
}
-(void)setUseAfterTask:(BOOL)useAfterTask {
_useAfterTask = useAfterTask;
if (!_useAfterTask) {
dispatch_block_cancel(_loadWaitingTask);
}
}
-(void)cancelAfterTask {
self.useAfterTask = NO;
}
-(BOOL)isUseAfterTask {
return self.useAfterTask;
}
@end