延时执行的三种方式:performSelectorXXX方法、GCD中延时函数、创建定时器

 
第一种方式:NSObject分类当中的方法,延迟一段时间调用某一个方法

@interface NSObject (NSDelayedPerforming)

※延时调用在当前线程使用特定模式的方法(如果数组没有数据或者参数为nil,则不会调用selector中方法)

- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay inModes:(NSArray *)modes;

※延时调用在当前线程使用默认模式的方法

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

※取消某一个延时调用请求

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

※取消全部的延时调用请求

+ (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget;

@end

-============================================================================

第二种方式:GCD当中的方法

间隔时间宏定义:NSEC纳秒、MSEC毫秒、 USEC微妙、 SEC秒、 PER每

#define NSEC_PER_SEC                     //每一秒有多少纳秒

#define NSEC_PER_MSEC                  //每一毫秒有多少纳秒

#define USEC_PER_SEC                    //每一秒有多少微妙(注意:在纳秒的基础上)

#define NSEC_PER_USEC                     //每一微秒有多少纳秒

开始时间宏定义:

#define DISPATCH_TIME_NOW            //当前时间

#define DISPATCH_TIME_FOREVER        //永久时间(无限循环)

相关方法:

※时间变量类型

typedef uint64_t dispatch_time_t;

※创建延时间隔时间(参数:宏定义开始时间、设置秒数*宏定义的间隔时间)

dispatch_time(dispatch_time_t when, int64_t delta);

※队列变量类型(主队列、默认全局队列、自定义队列)

dispatch_queue_t  queue

※执行延时函数操作(参数:延迟时间、队列、block操作)

dispatch_after(dispatch_time_t when,dispatch_queue_t  queue,dispatch_block_t block);

===================================================================================

第三种方式:创建定时器

@interface NSTimer : NSObject

属性:

※设置定时器的启动时间,管理定时器的启动和停止

@property (copy) NSDate *fireDate;

※只读属性,获取时间间隔

@property (readonly) NSTimeInterval timeInterval;

※这是7.0之后的一个新特性,由于NSTimer不精确,通过它设置误差范围

@property NSTimeInterval tolerance ;

※只读属性,获取定时器是否有效

@property (readonly, getter=isValid) BOOL valid;

※参数信息

@property (readonly, retain) id userInfo;

方法:

※创建定时器的time-类方法,需要手动fire开启定时器,将执行方法封装到NSInvocation中

+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation repeats:(BOOL)yesOrNo;

※创建定时器的time-类方法,需要手动fire开启定时器

+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo;

※创建定时器的scheduled-类方法,不需要手动fire开启定时器,将执行方法封装到NSInvocation中

+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation repeats:(BOOL)yesOrNo;

※创建定时器的scheduled-类方法,不需要手动fire开启定时器

+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo;

※创建定时器的实例方法,会在指定时间开启定时器

- (instancetype)initWithFireDate:(NSDate *)date interval:(NSTimeInterval)ti target:(id)t selector:(SEL)s userInfo:(id)ui repeats:(BOOL)rep;

※开启定时器

- (void)fire;

※使定时器失效,将定时器从循环池移除掉

- (void)invalidate;

@end

iOS:延时执行的三种方式的更多相关文章

  1. iOS拨打电话的三种方式

    iOS拨打电话的三种方式 1,这种方法,拨打完电话回不到原来的应用,会停留在通讯录里,而且是直接拨打,不弹出提示 1 2 var string = "tel:" + "1 ...

  2. iOS字体加载三种方式

    静态加载 动态加载 动态下载苹果提供的多种字体 其他 打印出当前所有可用的字体 检查某字体是否已经下载 这是一篇很简短的文章,介绍了 iOS 自定义字体加载的三种方式. 静态加载 这个可以说是最简单最 ...

  3. iOS中延时执行的几种方式的比较和汇总

    本文列举了四种延时执行某函数的方法及其一些区别.假如延时1秒时间执行下面的方法. - (void)delayMethod { NSLog(@"execute"); } 1.perf ...

  4. IOS中延时执行的几种方式的比较

    本文列举了四种延时执行某函数的方法及其一些区别.假如延时1秒时间执行下面的方法. - (void)delayMethod { NSLog(@"execute"); } 1.perf ...

  5. iOS延时执行的四种方法

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...

  6. iOS设置圆角的三种方式

    第一种方法:通过设置layer的属性 最简单的一种,但是很影响性能,一般在正常的开发中使用很少. ? 1 2 3 4 5 6 7 UIImageView *imageView = [[UIImageV ...

  7. script 执行的三种方式

    <script>: 脚本的获取和执行是同步的.此过程中页面被阻塞,停止解析. <script defer = "defer">:脚本的获取是异步的,执行是同 ...

  8. shell脚本执行的三种方式

    (1)  bash script_name 或 sh script_name    推荐使用此方法,script_name 不需要执行权限亦可执行.   (2) path/script_name 或 ...

  9. iOS逆传值的三种方式

    1.代理 2.block 2.通知中心

随机推荐

  1. www.verycd.com

    #encoding=utf-8 import urllib import urllib2 postdate = urllib.urlencode({'continueURL':'http://www. ...

  2. ubuntu 软件包(package)更换源(source)为阿里云镜像 update&upgrade

    在ubuntu下用apt-get install安装软件时,发现package list中没有所需的软件, 估计可能是package list太旧了,于是需要apt-get update & ...

  3. PHP读取文件夹的文件列表

    /** * getDir()取文件夹列表,getFile()取对应文件夹下面的文件列表,二者的区别在于判断有没有“.”后缀的文件,其他都一样 */ //获取文件目录列表,该方法返回数组 functio ...

  4. 云平台学习--GitLab

    今天和师父还有孙老师一起,两位大神给我讲了下全世界最先进的云平台架构(Tigzx). 废话不多说,直接说代码的GitLab 第一步: 访问路径:http://git.dlanqi.com:30503, ...

  5. (3) go 指针

    1.获取地址 取地址 &i 2.指针 var p *int=&i ptr 是一个地址 *ptr 是可看成一个变量,该地址所在的变量,也就是 num 3.常见值类型 引用类型 值类型:栈 ...

  6. 安装 SQL Server 2008 和管理工具 SQL Server 2008 management studio 及相关问题解决

    Sql Server 2008 问题小总结 http://www.lihengyu.com/blog/4877.html 安装 SQL Server 2008 和管理工具 SQL Server 200 ...

  7. [xsy2282]cake

    题意:一个$n\times n$的有标号点阵,现在用一条直线把它们分成两部分,问有多少种不同的分法 结论:方案数就是以点阵上的点为端点且不经过第三个点的线段数 对一个满足要求的线段,将其绕中点顺时针转 ...

  8. 【莫比乌斯反演+容斥】BZOJ2301-[HAOI2011]Problem b(成为权限狗的第一题纪念!)

    [题目大意] 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数. [思路] “怎么又是你系列……”思路 ...

  9. 【穷竭】POJ3187-Backward Digit Sums

    [思路] 利用杨辉三角形,每一个数字被加的次数等于它在杨辉三角形中对应的那个数字.注意这道题的意思是,最底层是N的全排序,而不是指1..10都可以.生成杨辉三角形的时候第一次我用了二重循环模拟生成,后 ...

  10. Problem D: 零起点学算法95——弓型矩阵

    #include<stdio.h> #include<string.h> int main() { ][]; while(scanf("%d%d",& ...