IOS中延时执行的几种方式的比较和汇总
本文列举了四种延时执行某函数的方法及其一些区别。假如延时1秒时间执行下面的方法。
-(void)delayMethod { NSLog(@"execute"); }
1.performSelector方法[self performSelector:@selector(delayMethod) withObject:nil
afterDelay:1.0f]; 此方式要求必须在主线程中执行,否则无效。 是一种非阻塞的执行方式, 暂时未找到取消执行的方法。2.定时器:NSTimer
[NSTimer scheduledTimerWithTimeInterval:1.0f target:self
selector:@selector(delayMethod) userInfo:nil repeats:NO];
此方式要求必须在主线程中执行,否则无效。 是一种非阻塞的执行方式, 可以通过NSTimer类的-
(void)invalidate;取消执行。
sleep方式
[NSThread sleepForTimeInterval:1.0f]; [self delayMethod];
此方式在主线程和子线程中均可执行。 是一种阻塞的执行方式,建方放到子线程中,以免卡住界面 没有找到取消执行的方法。4.GCD方式
double delayInSeconds = 1.0; __block ViewController* bself = self;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW,
(int64_t)(delayInSeconds * NSEC_PER_SEC)); dispatch_after(popTime,
dispatch_get_main_queue(), ^(void){ [bself delayMethod]; });
此方式在可以在参数中选择执行的线程。 是一种非阻塞的执行方式, 没有找到取消执行的方法。
Eidesen_Blog_ios
ios7 UILabel sizeWithFont方法的最新写法
Eidesen阅读 2.3k
性能优化之使用vue-worker插件(基于Web Worker)开启多线程运算提高效率
水冗水孚赞 5阅读 482
iOSer 年度总结|晋升的逻辑是什么
杭城小刘赞 6阅读 1.9k
这一次,解决Flutter Dialog的各种痛点!
小呆呆666赞 1阅读 3.5k
网易云音乐开源全链路埋点方案-曙光埋点(dawn)
云音乐技术团队赞 2阅读 462
Flutter 让你的Dialog脱胎换骨吧!(Attach,Dialog,Loading,Toast)
小呆呆666赞 2阅读 2.4k
Mac下编译WebRTC(Mac和iOS版本)
吴尼玛阅读 3.4k
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。