IOS GCD dispatch_after NSTimer 延迟加载

来源:互联网 发布:java xmpp即时通讯 编辑:程序博客网 时间:2024/06/15 05:36
  1. dispatch_after

比如我们经常会遇到延迟处理的任务,想在几秒后执行,也可能不仅限于几秒,总之这种想再指定时间处理后执行处理的情况,有两种办法一种是dispatch after和NSTimers处理。    

dispatch_after(dispatch_time(DISPATCH_TIME_NOW(int64_t)(2ull*NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

           });

第一个参数DISPATCH_TIME_NOW表示现在的时间

第二个参数是指定时间用的dispatch_time_t类型的值 (2ull*NSEC_PER_SEC)  “ull“表示c语言数值的字面量,是显示表明类型时使用的字符串(表示unsigned long long) 

NSEC_PER_SEC 表示秒

NSEC_PER_MSEC 表示毫秒

NSEC_PRE_USEC 表示微秒

第三个参数是指定要追加处理的dispatch queue


#warning mark -注意

 1.不是一定时间后执行相应的任务,而是一定时间后,将执行的操作加入到队列中(队列里面再分配执行的时间)

 2.比如主线程 RunLoop 1/60秒检测时间,追加的时间范围 3s~(3+1/60)s



2 .NSTimer 定时器

(1).把repeats改为NO;

 NSTimer *timer = [NSTimer timerWithTimeInterval:时间 target:self selector:<方法名字> userInfo:nil repeats:NO];

( 2).需要用到runloop的知识有兴趣的同学可以去了解一下。

   [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode]

sad

3.类方法

- (void)performSelector:(SEL)aSelector withObject:(nullableid)anArgument afterDelay:(NSTimeInterval)delay inModes:(NSArray<NSRunLoopMode> *)modes;

- (void)performSelector:(SEL)aSelector withObject:(nullableid)anArgument afterDelay:(NSTimeInterval)delay;

+ (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget selector:(SEL)aSelector object:(nullable id)anArgument;

+ (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget;


三者的比较:gcd创建的不能控制,NSTimer 定时器可以控制可以销毁,具体的用法自己而定



0 0
原创粉丝点击