NSTimer不准确与GCDTimer详解

NSTimer不准,scheduleTimer放在runloop里面,受runloop模式影响会不准
//    [NSTimer scheduledTimerWithTimeInterval:<#(NSTimeInterval)#> target:<#(nonnull id)#> selector:<#(nonnull SEL)#> userInfo:<#(nullable id)#> repeats:<#(BOOL)#>];

所以创建GCD定时器
//dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, <#dispatchQueue#>);
//dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, <#intervalInSeconds#> * NSEC_PER_SEC, <#leewayInSeconds#> * NSEC_PER_SEC);
//dispatch_source_set_event_handler(timer, ^{
//    <#code to be executed when timer fires#>
//});

//dispatch_resume(timer);

看下面实例:

#import "ViewController.h"@interface ViewController ()
/** 定时器(这里不用带*,因为dispatch_source_t就是个类,内部包含了) */
@property (nonatomic, strong) dispatch_source_t timer;
@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];//获得队列dispatch_queue_t dispatchQueue = dispatch_get_global_queue(0, 0);//创建一个gcd定时器 (dispatch_source_t timer:dispatch_source_t本质还是个OC对象,是个局部变量,需要强引用,不然下面使用无效)self.timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatchQueue);//OC对象%@可以打印NSLog(@"%@", self.timer);//设置定时器的各种属性(几时开始,每隔多长时间执行一次)//GCD时间参数,一般是纳秒 NSEC_PER_SEC 纳秒单位等于一秒;DISPATCH_TIME_NOW当前时间dispatch_time_t start = DISPATCH_TIME_NOW;uint64_t interval = (uint64_t)(2.0 *NSEC_PER_SEC);dispatch_source_set_timer(self.timer, start, interval, 0);dispatch_source_set_event_handler(self.timer, ^{NSLog(@"--------%@",[NSThread currentThread]);});//启动定时器dispatch_resume(self.timer);
}-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {NSLog(@"----touchesBegan点击取消定时器!");dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{//取消定时器dispatch_cancel(self.timer);self.timer = nil;NSLog(@"%@",self.timer);});
}
@end

实例可直接使用,可以封装成timer类使用,懂了的请点赞哦!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/247602.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

flex的12个属性

容器&#xff08;父元素&#xff09;的属性&#xff1a; flex-direction属性决定主轴的方向 flex-wrap 属性决定项目在一行排不下的情况下是否换行 flex-flow flex-flow属性是flex-direction属性和flex-wrap属性的简写形式&#xff0c;默认值为row nowrap。 jstify-content …

vue图片懒加载插件vue-lazyload

插件地址&#xff1a;https://github.com/hilongjw/vue-lazyload demo&#xff1a;http://hilongjw.github.io/vue-lazyload/ 1、安装 cnpm i vue-lazyload -S 2、使用 main.js import VueLazyLoad from vue-lazyloadVue.use(VueLazyLoad, {error:/static/error.png,loadin…

IT需求过程管理

IT部门就是为其他业务、内勤部门提供信息化手段的&#xff0c;所以在实施信息化系统的时候首先要做的就是需求调研&#xff0c;但是针对于绝大多数业务部门的人员而言&#xff0c;信息系统是很不熟悉的&#xff0c;我们会经常听到这样的回复“这个应该很快就可以实现吧”、“当…

maskView与CAGradientLayer详解

#maskView基本原理 - png图片透明像素的原理 - maskView可类比于多张png图片的叠加遮罩&#xff0c;原理类似 - maskView是iOS8以上才有的&#xff0c;如果要考虑兼容低版本&#xff0c;用maskLayer替代 //使用maskView的情况 property (nonatomic, strong)UIImageView *addIma…

nodejs的启动方式

1、原始node命令 直接命令行中使用node命令 node xxx.js 或者安装nodemon&#xff0c;使用nodemon启动方便在开发阶段热部署代码改动 npm i nodemon -G nodemon xxx.js 2、webstorm方式 webstorm中&#xff0c;需要执行的文件的上&#xff0c;右键->run&#xff0c;右…

win7rc 序列号- 10/21之前

安装介绍&#xff1a;http://www.microsoft.com/china/windows/windows-7/download.aspx 注册获得序列号&#xff1a;http://technet.microsoft.com/zh-cn/evalcenter/dd353205.aspx?ITPIDmscomsc在 2009 年 10 月 21 日之前&#xff0c;您仍可以通过注册来获取产品密钥或查找…

maskView与CAGradientLayer那回事儿

maskView基本原理 png图片透明像素的原理maskView可类比于多张png图片的叠加遮罩&#xff0c;原理类似maskView是iOS8以上才有的&#xff0c;如果要考虑兼容低版本&#xff0c;用maskLayer替代 //使用maskView的情况 property (nonatomic, strong)UIImageView *addImageView;…

mongoose操作mongodb

http://mongoosejs.com/docs/api.html#index-js mongoose是nodejs环境下操作mongodb的模块封装&#xff0c;使用mongoose之后&#xff0c;实际上只需要在mongodb中创建好数据库与用户&#xff0c;集合的定义、创建、操作等直接使用mongoose即可。 一、连接二、重要概念三、基本…

虚拟机上使用ghost xp

虚拟机ghost 1 先用启动项里的pq对虚拟机的硬盘格式化&#xff0c;然后最重要的一点就是 --右击--进阶-设定为作用然后执行2 重启一键安装到C盘就行了转载于:https://www.cnblogs.com/master-zhu/archive/2009/09/15/1567081.html

iOS11新增版本判断API

iOS11新增版本判断API iOS11版本现在有了简单的API&#xff0c;OC也开始支持swfit的available语法&#xff0c;不用再手写iOS版本判断了。 if (available(iOS 11.0, *)) {// 版本适配 } // 或者 #ifdef __IPHONE_11_0 #endif 目前没发现有iPhoneX的机型判断API&#xff0…

调试asp

response.Write(sqltext) response.End() response.Write(sqltext) response.End()转载于:https://www.cnblogs.com/master-zhu/archive/2009/09/21/1570816.html

vue滚动加载插件vue-infinite-scroll

vue-infinite-scroll插件可以无限滚动实现加载更多&#xff0c;其作用是是当滚动条滚动到距离底部的指定高度时触发某个方法。 https://github.com/ElemeFE/vue-infinite-scroll/ https://www.npmjs.com/package/vue-infinite-scroll 安装 cnpm i vue-infinite-scroll -S v…

实例适配ios11

不多bb&#xff0c;上码 #import "ViewController.h" #import "PersonViewModel.h" #import "Person.h" #import "ShowTableViewCell.h" #import <Masonry/Masonry.h> #import <MJRefresh/MJRefresh.h>interface ViewCon…

mac下iterm配色、半透明与样式设置

主要为了实现命令行颜色高亮与整个命令窗口半透明效果。 1、配色主题包下载 1、http://iterm2colorschemes.com/ 下载后解压&#xff0c;到iterm2中&#xff0c;左上角iTerm2->preferences->Profiles&#xff0c;右侧面板找到Colors选项&#xff0c;右下角展开Color Pr…

一个 Dubbo 服务启动要两个小时

前几天在测试环境碰到一个非常奇怪的与 dubbo 相关的问题&#xff0c;事后我在网上搜索了一圈并没有发现类似的帖子或文章&#xff0c;于是便有了这篇。 希望对还未碰到或正在碰到的朋友有所帮助。 现象 现象是这样的&#xff0c;有一天测试在测试环境重新部署一个 dubbo 应用的…

表单提交enctype参数详解之:application/x-www-form-urlencode和multipart/form-data

application/x-www-form-urlencode 我们在提交表单的时候&#xff0c;form表单参数中会有一个enctype的参数。enctype指定了HTTP请求的Content-Type。 默认情况下&#xff0c;HTML的form表单的enctypeapplication/x-www-form-urlencoded。 application/x-www-form-urlencoded是…

内网端口映射工具

由于开发微信需要一个公网域名&#xff0c;需要将本地端口映射到外网域名&#xff0c;最热的工具是ngrok&#xff0c;但被微信屏蔽了&#xff0c;这里使用的是natapp&#xff0c;环境是mac&#xff0c;windows下可使用nat123、花生壳等工具实现同样功能。 简单记录一下过程。 …

iOS----------iPhone导出手机所有短信

第一步&#xff1a;手机连接到itunes 选择本电脑备份 备份的时候不要加密 然后立即备份 第二步&#xff1a;前往文件夹&#xff0c;找到itunes的备份路径~/Library/Application Support/MobileSync/Backup 在这目录下搜索 3d0d开头的文件&#xff0c;这就是 iPhone 短信的…

跨站点脚本(XSS)

1. 简介 跨站点脚本(XSS)是当前web应用中最危险和最普遍的漏洞之一。安全研究人员在大部分最受欢迎的网站,包括Google, Facebook, Amazon, PayPal等网站都发现这个漏洞。如果你密切关注bug赏金计划,会发现报道最多的问题属于XSS。为了避免跨站脚本,浏览器也有自己的过滤器,但安…

spring webscoket服务端使用记录

记录spring4中websocket的使用方式 pom jar包配置 <dependency> <groupId>org.springframework</groupId> <artifactId>spring-websocket</artifactId> <version>${spring.version}</version> </dependency> <depen…