NSTimer

iOS开发-NSTimer探究 NSTimer 的使用 1、NSTimer 的创建 我们经常会使用下面四种常用的 NSTimer 的创建方法,都是类方法。 Target-action: + (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(nullable id)... 阅读详情

iOS开发中定时器的使用:

1.我们平时用到的定时器主要是这样的:

NSTimer               *_timer;

if (!_timer) {

        _timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(startTimerMethod) userInfo:nil repeats:YES];

    }

- (void)startTimerMethod {


}

   使用这种定时器可以满足我们基本的需求,但是有时候我们会用到交互,就是在存在UITableView的界面上添加定时器,这个时候我们上下滚动TableView,定时器暂停工作,手指离开屏幕,定时器继续运行。

   这是一种非常便利的定时器创建方法,在这个方法中定时器其实做了两件事:1.创建一个Timer。2.将Timer添加到当前RunLoop的NSDefaultRunLoopMode中。

2.NSTimer的另一种创建方法是:

NSTimer               *_timer;

if (!_timer) {

     _timer = [[NSTimer alloc] initWithFireDate:[NSDate dateWithTimeIntervalSinceNow:1] interval:1 target:self selector:@selector(startTimerMethod) userInfo:nil repeats:YES];

    [[NSRunLoop currentRunLoop] addTimer:_timer forMode:NSRunLoopCommonModes];

    }

- (void)startTimerMethod {


}

用这种方法创建定时器,可以控制定时器在什么时间开始启动,这种方法必须手动把定时器添加到RunLoop里面,否则不能开始定时器。

3.NSTimer的第三种创建方法:

NSTimer               *_timer;

if (!_timer) {

    _timer = [NSTimer timerWithTimeInterval:1 target:self selector:@selector(startTimerMethod) userInfo:nil repeats:YES];

    [[NSRunLoop mainRunLoop] addTimer:_timer forMode:NSDefaultRunLoopMode];

    [_timer fire];

    }

- (void)startTimerMethod {


}

用这种方法创建定时器,必须把定时器加入RunLoop里,并且,如果不手动fire,定时器不能立即开启。


好,那下面就说一下定时器的使用场景,暂停,开启,移除定时器。

第一种创建方法是我们平时经常使用的,但是当页面存在TableView,CollectionView,ScrollView的时候,使用第一种方法创建定时器就不好用了,这个时候可以使用第二种,第三种方法创建定时器。这个时候一定要Timer加入RunLoop里,因为视图的加载主要是在mainRunLoop,如果同事创建多个Timer,最好把定时器加到currentRunLoop里面,如果有必要可以开启子线程。如果遇到TableView,CollectionView,ScrollView的时候,就要使用NSRunLoopCommonModes Mode。

每个RunLoop运行在不同的Mode下,下面就具体说说不同Mode的适用场景。

NSDefaultRunLoopMode

// 默认模式,几乎包含了所有输入源(NSConnection除外),一般情况下使用此模式。

UITrackingRunLoopMode

// 在拖动loop或其他user interface tracking loops时处于此种模式下,在此模式下会限制输入事件的处理。例如,当手指按住UITableView拖动时就会处于此模式。

NSRunLoopCommonModes

// 这是一个伪模式其为一组run loop mode的集合,将输入源加入此模式意味着在Common Modes中包含的所有模式下都可以处理。


@property (copy) NSDate *fireDate;  // 设置定时器什么时间开启启动,[NSDate distantPast]定时器马上启动,[NSDate dateWithTimeIntervalSinceNow:2]定时器两秒之后再启动。

@property (readonly) NSTimeInterval // 设置调用定时器的时间间隔。i meInterval;

@property NSTimeInterval tolerance NS_AVAILABLE(10_9, 7_0);  // 因为定时器不是完全精准的,调用这个值设置误差范围。

@property (readonly, getter=isValid) BOOL valid;  // 获取定时器是否有效,YES有效,NO无效


// 暂停定时器

[_timer setFireDate:[NSDate distantFuture]];

// 开启暂停的定时器

[_timer setFireDate:[NSDate distantPast]];


最后要移除定时器,避免内存泄漏。

- (void)clearTimer {

    if (_timer.valid) {

        [_timer invalidate];

    }

    _timer = nil;

}


在官方文档中,invalidate 是唯一的方法将定时器从循环池中移除,停止后一定要把 _timer = nil; 否则还是没有释放,会造成内存泄漏。


以上是本人的理解:如有问题欢迎指正。



室内无人机自主定位:融合Mid360激光雷达与光流传感器的无GPS导航实践 本文详细介绍了室内无人机自主定位技术,通过融合Mid360激光雷达与光流传感器实现无GPS导航。文章分析了技术挑战、硬件配置、算法优化及实战调试,展示了在复杂室内环境中如何实现厘米级定位精度,为仓库巡检、隧道勘测等场景提供可靠解决方案。 阅读详情

相关推荐

AI 生成测试报告:从 2 小时到 10 分钟

本文分享了AI在汽车电子测试报告生成中的应用案例。作者以某车企ECU测试项目为例,对比传统报告方式(每天2小时)与AI辅助方式(每天20分钟),效率提升83%。文章详细介绍了测试报告的核心要素(测试概况、结果、问题分析、发布建议)和不同类型报告(日报、周报、总结报告)的特点,并提供了从CANoe导出测试数据的Python解析脚本示例。通过AI自动化处理,大幅减少了测试工程师在报告整理上的时间投入,为汽车电子测试工作提供了实用效率提升方案。

小明的博客 443

iOS 定时器使用(Timer 和 CGD)

在程序开发中,我们常常借助定时器完成定时任务,比如短信验证码倒计时、运动计时等具有时间序列概念的操作。 最常用的定时方式有Timer 和GCD dispatchTimer Timer的使用 Timer 官方文档 Timer/NSTimer: 在某个时间间隔之后触发的定时器,向目标对象发送指定的消息。 Timer 的完成往往配合runloop和相应的 mode。 初始化 创建即添加到当前 runloop 通过带 scheduledxxx方法初始化的定时器,创建就会添加到当前 runloop ,且以 defau

小桥流水哗啦啦,iOS Coder 哒哒哒 4092

学习笔记|多样本单因素方差分析|事后比较|方差齐性|F检验|韦尔奇检验|两独立样本T检验|两样本方差分析|规范表达|《小白爱上SPSS》课程:SPSS第七讲 | 单因素方差分析怎么做?

学习笔记|多样本单因素方差分析|事后比较|方差齐性|F检验|韦尔奇检验|两独立样本T检验|两样本方差分析|规范表达|《小白爱上SPSS》课程:SPSS第七讲 | 单因素方差分析怎么做?

Medlar_CN的博客 9515

iOS中的3种定时器

Timer是一个简单的定时器,基于RunLoop的,通常用于实现对实时性要求不高的场合,因为它被注册在runloop的timers事件源集合中,如果当前runloop执行耗时任务超过了调用时间,那么就会丢弃当前次,直接执行下一次。导致定时器不准时的情况。然后通过schedule(deadline: .now(), repeating: .seconds(1))方法指定定时器的初始延迟时间和重复时间间隔,优点为:Dispatch定时器非常轻量级,基于GCD的实现,可以利用GCD的优势来进行任务调度,性能高。

Gefangenes的博客 769

VMware Workstation Pro 16 安装 Ubuntu 20.04

VMware Workstation Pro 16 安装 ubuntu 20.04目录环境VMware Workstation下载Ubuntu 20.04下载安装过程 目录 环境 Windows 10 Workstation 16 Pro for Windows Ubuntu 20.04 LTS 64位 desktop版本 VMware Workstation下载 链接: https://www.vmware.com/products/workstation-pro/workstation-pro-eval

qq_45642410的博客 1万+

Win11家庭版彻底关闭Hyper-V的3种方法(实测有效)

本文详细介绍了Win11家庭版彻底关闭Hyper-V的3种实测有效方法,解决与VMware的兼容性问题。包括命令行禁用虚拟化功能、微软官方工具DG_Readiness深度清理以及组策略与功能组件联用方案,帮助用户高效禁用Hyper-V并优化系统性能。

weixin_33728268的博客 2668

iOS中几种定时器

一、NSTimer 1. 创建方法NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(action:) userInfo:nil repeats:NO];*TimerInterval : 执行之前等待的时间。比如设置成1.0,就代表1秒后执行方法 target :

风继续吹 679

.NET 4.0下HttpWebRequest请求HTTPS报错?试试这个注册表修改方案

本文深入解析.NET 4.0下HttpWebRequest请求HTTPS报错问题,提供注册表修改方案以解决'基础连接已经关闭'错误。通过调整SchUseStrongCrypto注册表项,强制使用TLS 1.2等现代加密协议,确保安全连接。适用于企业环境部署和长期维护建议。

weixin_29310631的博客 356

ios 开发经常使用的定时器

【代码】ios 开发经常使用的定时器。

路人甲 312

使用再生龙备份还原liunx系统(精确每一步)

再生龙镜像可自行到官网下载(ISO/ZIP格式均可),然后使用tuxboot烧录工具制作启动盘,另外准备一个U盘用来存储备份的镜像文件,即再生龙盘和存储盘是两个分开的。当然也可以用分区工具把同一个硬盘分区来使用,比较方便,先学会基本的吧,只是告诉有个捷径,省个U盘。

米可的博客! 8367

YOLOv11改进 | Neck篇 | 独创HFPN利用分层特征融合块HFFB模块融合多层次特征改进yolov11(全网独家创新)

本文给大家带来的最新改进是利用分层特征融合块HFFB创新yolov11的neck部分我称之为HFPN,这个模块可以融合局部特征、全局特征、中间特征将三种特征融合在一起辅助yolov11进行检测,经过我的设计分为三种可以针对大目标、小目标、标准目标的检测方式均不同,大家可以根据自己的数据集进行不同的选择,本文的内容为我独家创新。YOLOv11改进系列专栏——本专栏持续复习各种顶会内容——科研必备目录一、本文介绍二、原理介绍三、核心代码四、添加方法4.1 修改一4.2 修改二4.3 修改三4.4 修改四。

Snu77的博客 5210

iOS中的定时器

一、NSTimer 二、CADisplayLink 三、dispatch_source_t 四、总结

chenzimin_blog 5320

Python 爬虫实战:全球渔业船舶捕捞记录数据采集与分析全攻略

通过本项目,我们实现了对全球渔业船舶捕捞记录数据的采集、处理和可视化,为渔业资源管理和海洋生态保护提供了数据支持。未来,可以进一步结合机器学习和深度学习技术,对捕捞行为进行预测和分类,提高对非法捕捞活动的识别能力。

2201_76125261的博客 557

IOS中关于NSTimer使用知多少

看到这个标题,你可能会想NSTimer不就是计时器吗,谁不会用,不就是一个能够定时的完成任务的东西吗?   我想说你知道NSTimer会retain你添加调用方法的对象吗?你知道NSTimer是要加到runloop中才会起作用吗?你知道NSTimer会并不是准确的按照你指定的时间触发的吗?你知道NSTimer就算添加到runloop了也不一定会按照你想象中的那样执行吗?   如果上面提

集结号 2万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

iOS开发学习之NSTimer失效、NSTimer与runloop之间的关系、解密NSTimer

1. 今天在开发的时候,遇到NSTimer无效、所以也到网上找了一些资料,看看究竟怎么回事儿、     再次也做一次分享、方便有需要的朋友。  1.   NSTimer是做什么的? 1.简单的理解就是一个定时器,在开发过程中,特定时间或者周期性去执行一个任务。    一次性    [NSTimer scheduledTimerWithTimeInterval:5 target:self

zhonggaorong的专栏 3426

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

iOS NSTimer释放方法

NSTimer释放的几种方法 我们在开发过程中,总要用到定时器的功能,想必大家一般都是使用NSTimer吧(当然也不排除使用dispatch_source_t或者CADisplayLink,这两种都要比NSTimer更精确)! 当我们在使用NSTimer时,如果销毁timer不及时就会造成循环引用导致内存泄露的问题,所以使用的时候大家都要注意使用得当! NSTimer销毁时我们调用invalida...

smile_sunshine 1071

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

swift中NSTimer的使用

github:https://github.com/potato512/SYSwiftLearning swift中使用NSTimer,效果图如下: 代码示例: // 定义常量 let tagLabel = 1000;// 定义变量 var timer:NSTimer!; var count:NSInteger = 0;// 实例化方法 func createNSTimer() {

番薯大佬的专栏 4281

iOS 如何使用 NSTimer 以及 runloop 和 NSTimer 的关系

在 ios 系统中,每启动一个线程,都会跟一个对应的 runloop,runloop 默认是关闭的 需要我们手动获取,设置并启动,(详细参考上面的博客),主线程例外,系统自动为主线程启动一个 runloop 并配置完毕.这里我们不管,主要看unloop 和 NSTimer 的关系, 如何正确使用 NSTimer.

iosYangming的博客 1653

NSTimer介绍

1.创建NSTimer 常用方法有 + (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)target selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)repeats; + (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)target selector:(SE

cheng_xing_的博客 782

NSTimer (IOS开发)

一 什么是NSTimer timer是一个能在从现在开始的后面的某一个时刻或者周期性的执行我们指定的方法的对象。总结为三要素:时间间隔、被触发、发送消息(执行方法) 二 NSTimer使用方法 初始化 系统提供了8个创建方法,6个类创建方法,2个实例初始化方法。 有三个方法直接将timer添加到了当前runloop default mode,而不需要我们自己操作,当然这样的代价是...

m_miao 2886

iOS开发 NSTimer定时器

目录创建NSTimer销毁NSTimerinvalidate与fireNSTimer与runloopNSTimer与performSelector 创建NSTimer 销毁NSTimer invalidate与fire NSTimer与runloop NSTimer与performSelector

qq_33655517的博客 1251

NSTimer使用

备注:之前都是通过分类修改navigationBar(添加背景图片),然后修改 tinColor 今天看到了一个新的方法 ,记录下,以备用之。 self.navigationController.navigationBar.layer.contents = (id)[UIImage imageWithColor:color].CGImage; //根据颜色返回图片 +(UI

code life 1831

iOS NSTimer销毁的问题

可能的原因是多次调用了scheduledTimerWithTimeInterval及[[NSRunLoopcurrentRunLoop]addTimer方法。 1.多次调用前提前销毁,保证主线程中只有一个NSTimer在运行即可。 @property (nonatomic,assign)int time; @property (nonatomic,assign

JoelChen的博客 5869

不订阅也能用Claude Science:AIUsage虚拟登录+隔离沙箱代理方案完整解析

AIUsage 的「Claude Science 代理」轨让你**无需 Claude 订阅**启动本地 Claude Science:通过本地虚拟登录越过登录门,在隔离沙箱中运行 daemon,再把推理请求经本地代理改道到你自选的第三方模型。全程不碰真实凭证,工具调用、Skill、MCP 等原生体验完整保留。 [![AIUsage 仪表盘总览:统一查看所有 AI 订阅用量与费用](https:/

gitblog_00941的博客 810
上一篇: 使用Xcode8上传成功后,商店里构建版本却没有应用
下一篇: SQLite 语句
YunFei_iOS
博客等级 码龄10年 4粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值