首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Xcode:为什么我的计时器每次打勾都会计算2秒?

首先,要了解这个问题的背景,我们需要知道 Xcode 计时器的运作方式。当一个应用程序使用 Xcode 计时器时,它会创建一个 NSTimer 实例,该实例会在指定的时间间隔(称为 interval)触发一次回调函数。如果在该时间间隔内再次调用 start 方法,则会重新计时,直到该间隔结束。

根据你提供的信息,每次调用 start 方法后,计时器会计算 2 秒,然后输出 "2秒"。这可能是由于你在代码中每次调用 start 方法时,都重新设置了计时器的 interval 属性。因此,每次调用 start 方法时,计时器都会重新计时,输出 "2秒"。

为了解决这个问题,你可以尝试以下方法:

  1. 在每次调用 start 方法时,保留上一次调用的 interval 值,而不是每次都重新设置。例如:
代码语言:swift
复制

let interval = 2.0

timer.invalidate()

timer = NSTimer.scheduledTimerWithTimeInterval(interval, target: self, selector: #selector(timerAction), userInfo: nil, repeats: true)

代码语言:txt
复制

这将确保计时器在上一次调用后继续计时,而不是每次调用时都重新计时。

  1. 检查你的代码中是否有其他地方设置了计时器的 interval 属性。如果你在某个地方设置了 interval 属性,并将其值设置为 2 秒,那么每次调用 start 方法时,计时器都会重新计时,输出 "2秒"。
  2. 如果你确定你的代码中没有其他地方设置了 interval 属性,并且每次调用 start 方法时都没有重新设置 interval 属性,那么可能需要考虑计时器的实现方式是否有误。可以尝试使用其他计时器库,例如 SwiftUI 中的 Timer,来验证是否是计时器实现的问题。

希望这些方法能够帮助你解决问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

改进版CodeTimer及XCode性能测试

在测试XCode性能时候,发现每次执行测试程序得到执行时间差距实在太大,于是采用了老赵CodeTimer来计算线程时间,后来因为测试程序稍微有点复杂,在使用匿名委托时会有参数“打包”过程,于是改进了...CodeTimer,测试功能代码通过实现一个继承自CodeTimer类来实现,避免每次迭代时参数“打包”过程。...XCode性能测试 XCode每次升级都会进行性能测试,不过那是为了检查升级是否造成了性能瓶颈,实际上性能测试就是作为XCode升级最后一道工作。...,Entity是普通实体类操作,WeakEntity表示弱类型操作实体,DynEntity表示动态创建实体类(CodeDom)执行操作 5,所有比例计算以ADO.SQL为基准,因为XCode也是采用这种方式...至少,到现在为止,没有发现太大问题。 想以他这个项目为例子,详细讲解一下XCode各个缓存,以及如何去处理海量数据。

98270

iOS 远程推送概念相关准备工作代码实现:(前提:确保bundleID和网站配置一样)AppDelegate中全部代码

顾名思义,就是从远程服务器推送给客户端通知(需要联网) 远程推送服务,又称为APNs(Apple Push Notification Services) 2.为什么需要远程推送通知?...3.所有的苹果设备,在联网状态下,都会与苹果服务器建立长连接 什么是长连接?...点击编辑 打勾后进行配置 ? 打勾后进行配置 4.配置成功后钥匙串中多了一个证书,一个调试,一个push ?...但是在Xcode7中这个选项打开和关闭Token值不一样!打开时候才是真正Token值! 注意在Xcode 7 之后必须打开推送选项,否则可能会导致请求token不一样! ?...application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo; (2)前台、后台和退出推送都会调用这个代理方法

1.9K100
  • 函数节流与防抖

    一开始以为清除计时器用null和用clear一样,其实不然 所有的计时器都会有一个返回值,这个返回值就是计时器唯一标识 当我们将定时器名赋予null时,其实只是将计时器返回值改为了null...('是定时器'); timer = null; console.log(timer); }, 1000); } fn();//是定时器 /n null fn();//是定时器...,因此采用了闭包,将t作为function私有变量,不污染全局变量 最后一个问题 为什么要用apply呢?...,而不是数组,因此我们采用apply来接受这个数组 函数节流 函数节流是限制一个函数在一定时间内只能执行一次 有了函数防抖基础,节流操作就简单很多了 实现函数节流主要是要计算每次触发事件时间差...很显然当前时间戳也就是cur会不断随时间变大,当时间差大于了delay就会满足if条件,直接执行 也就是说,当我们连续点击时,只有当我们停下前那一次点击事件会通过else里函数输出,其余都会从满足

    44230

    使用symbolicatecrash解析了一个crash log

    但是这次,老板傲娇拒绝了,而是让自己来做符号化工作>.< 工具和必要文件 上网查了查,选择了symbolicatecrash工具来符号化这个崩溃日志。...这是Xcode自带一个perl脚本。 另外,还需要崩溃日志(测试同学给了我一个.plist文件),测试包对应.dSYM文件和测试包对应.app文件。...可能就是这样(图是stackoverflow上截): 只有一部分被符号化了崩溃日志 然而网上教程都没有提到这种情况(╥﹏╥) 那让来想想这是为什么吧。...它一定会与iOS版本有关,因为iOS每次升级,肯定都会有不同system framework符号文件。...想起每当我第一次将某个iOS设备连接到电脑上时,Xcode都会loading一段时间,才能使用这个设备。在loading阶段,依稀记得Xcode提示是“copying symbols”之类

    87720

    【IOS开发基础系列】Xcode工具使用技巧

    是保存 16 进制函数地址映射信息中转文件,我们调试 symbols 都会包含在这个文件中,并且每次编译项目的时候都会生成一个新 dSYM 文件,位于 /Users//Library/...大前提是我们需要有软件版本对应 dSYM 文件,这也是为什么我们很有必要保存每个发布版本 Archives 文件了。...1.2.4 dSYM工具使用         于是抽了几个小时时间将这些命令封装到一个应用中,也为以后解决bug提供了便利。...Mac app下载地址项目源码地址 1.3 工程配置 1.3.1 调试时静态资源每次更新 XCODE调试时强制更新模拟器上资源文件 http://blog.csdn.net/samuelltk/article.../Resources/phone -exec touch -cm {}  \;         注意使用相对路径,表示每次build后,都会对指定路径中文件进行touch操作还没完,还有一个重要步骤,

    48620

    差点翻车了

    之前讲了计算机网络体系架构 计算机网络五层结构解析 、 TCP粘包问题怎么解 、流量控制&拥塞控制 (戳即可看到该文章喔)。...TCP协议里面有如下几种机制去保证 一、字节编号机制 编号机制很好理解,就是给TCP数据段里面的数据部分 ,每个字节都进行编号。 为什么需要编号? 好说,就是为了更清楚接收和发送。...每发送一个TCP数据段都会启动一个超时重传计时器(Retransmission Timer,RTT)。如果在计时器时间内没有收到确认应答号,会启动重传,重新发送该数据段。...TCP目前采用一种自适应算法计算RTT值。 给定一个初始RTT值,初始RTT值是6s,后面每次收到确认应答会进行一次计算计算本次往返时间和RTT波动,也就是RTT偏差。...是龙叔,一个分享互联网技术和心路历程大叔,感谢你阅读。你小小点赞将成为继续授人以渔大大动力。

    51710

    {防抖}与{节流}

    这不是啥新问题,只不过最近又重新回顾了一下这个问题 一、需求 解决 onscroll每次计算导致性能问题 onscroll是最典型需要进行防抖或者节流处理问题 最近有人问到我,防抖和节流有什么不同...二、原理 无论是防抖还是节流最终目的都是避免回调函数中处理每次都执行。...每次onscroll时候,先清除掉计时器.如果不清楚,会导致多次触发时候,其实是把好多次处理方法放在某个时间点后一起执行。...setTimeout(function () { console.log(i); }, 3000); })(i); } 这是因为,每次将上次...节流思想如下: 借助flag元素和setTimeout实现在一定时间内,只执行一次方法 防抖中,每次其实都会生成定时器,只不过定时器还没到时间(这个时间是指将事件挂在事件循环队列后面的时间),就把上面的定时器给清掉了

    91520

    万字整理 | 深入理解Linux时间子系统

    再来说一句话,这个表走时非常精准,大家立马就明白了是啥意思。我们再给走时下个定义,走时,是时钟追踪和记录时间流逝动作。...系统可能会有很多计时器硬件和定时器硬件。在系统启动时每个硬件都会初始化并注册自己。注册完之后系统会选择一个最佳时钟源作为走时器时钟源,选择一个最佳时钟事件设备作为更新系统时钟设备。...事实上我们发现用settimeofday修改系统时钟在系统重启后生效了,并没有丢失,这是为什么呢?...系统在每次run local timer时候都会检测一下,如果不支持高精度定时器,就尝试切换到动态tick模式,如果支持高精度定时器就切换到高精度定时器模式,此模式下会尝试切换到动态tick模式。...每次定时器到期时都会reprogram next event。

    1.5K20

    React ref & useRef 完全指南,原来这么用!

    reference 和 state 之间主要区别 让我们重用上一节中logbuttonclicked组件,但使用useState()钩子来计算按钮点击次数: import { useState }...——这意味着每次状态更新时,组件都会重新呈现。 所以,state和references之间两个主要区别是: 更新 state 会触发组件重新呈现,而更新 ref 则不会。...此外,如果组件在秒表处于活动状态时卸载,useEffect()清理函数也将停止计时器。 在秒表示例中,ref用于存储基础架构数据—活动计时器id。...这就是为什么inputRef。current在初始呈现时计算为undefined。...更新 references 限制 功能组件功能范围应该计算输出或调用钩子。 这就是为什么更新 ref (以及更新 state)不应该在组件函数直接作用域内执行。

    6.7K20

    最后一天,继续卷!

    早上有个读者问了图解网络 PDF 里问题: 就是他不明白「为什么 TCP 三次握手期间,为什么客户端和服务端初始化序列号要求不一样呢?」...图解网络 PDF 在解释这个原因时候,就写几句话,可能会让人看很懵逼。 后来,跟他交流半个小时,终于把他讲明白了。...是一步一步把他讲明白觉得应该有不少人会有类似的问题,所以今天在肝一篇! 正文 为什么 TCP 三次握手期间,为什么客户端和服务端初始化序列号要求不一样呢?...初始序列号,在 TCP 建立连接时候,客户端和服务端都会各自生成一个初始序列号,它是基于时钟生成一个随机数,来保证每个连接都拥有不同初始序列号。...tcp_timestamps 参数是默认开启,开启了 tcp_timestamps 参数,TCP 头部就会使用时间戳选项,它有两个好处,一个是便于精确计算 RTT ,另一个是能防止序列号回绕(PAWS

    70330

    怎么禁用 Ubuntu 服务器中终端欢迎消息中广告

    你可能已经知道 MOTD,即 Message Of The Day 开头首字母,在 Linux 系统每次登录时都会显示欢迎信息。...已经几次注意到这些链接,但我并在意,也从未点击过。题图是 Ubuntu 18.04 LTS 服务器上显示终端欢迎消息。...正如我之前所说,其中一个链接是不相关,没有任何与 Ubuntu 服务器相关细节,这就是为什么开头称它们为广告。...一个是打印通用 “欢迎” 横幅。下一个打印 3 个链接,显示在哪里可以找到操作系统帮助。另一个计算并显示本地系统包可以更新数量。另一个脚本告诉你是否需要重新启动等等。...这就是 MOTD 工作原理。 此外,/etc/update-motd.d/50-motd-news 文件中包含自定义用户代理字符串,以报告有关计算信息。

    1.7K10

    如何禁用 Ubuntu 服务器中终端欢迎消息中广告

    你可能已经知道 MOTD,即 Message Of The Day 开头首字母,在 Linux 系统每次登录时都会显示欢迎信息。...已经几次注意到这些链接,但我并在意,也从未点击过。题图是 Ubuntu 18.04 LTS 服务器上显示终端欢迎消息。...正如我之前所说,其中一个链接是不相关,没有任何与 Ubuntu 服务器相关细节,这就是为什么开头称它们为广告。...一个是打印通用 “欢迎” 横幅。下一个打印 3 个链接,显示在哪里可以找到操作系统帮助。另一个计算并显示本地系统包可以更新数量。另一个脚本告诉你是否需要重新启动等等。...这就是 MOTD 工作原理。 此外,/etc/update-motd.d/50-motd-news 文件中包含自定义用户代理字符串,以报告有关计算信息。

    4.3K20

    怎么禁用 Ubuntu 服务器中终端欢迎消息中广告

    你可能已经知道 MOTD,即 Message Of The Day 开头首字母,在 Linux 系统每次登录时都会显示欢迎信息。...已经几次注意到这些链接,但我并在意,也从未点击过。题图是 Ubuntu 18.04 LTS 服务器上显示终端欢迎消息。...正如我之前所说,其中一个链接是不相关,没有任何与 Ubuntu 服务器相关细节,这就是为什么开头称它们为广告。...一个是打印通用 “欢迎” 横幅。下一个打印 3 个链接,显示在哪里可以找到操作系统帮助。另一个计算并显示本地系统包可以更新数量。另一个脚本告诉你是否需要重新启动等等。...这就是 MOTD 工作原理。 此外,/etc/update-motd.d/50-motd-news 文件中包含自定义用户代理字符串,以报告有关计算信息。

    1.9K41

    Linux时间子系统(下)

    计算机里一共有三类时钟硬件,分别是真时钟RTC(Real Time Clock)、定时器Timer、计时器Counter。...目前两次时钟中断最长间隔被假设成了10分钟。 为什么是10分钟?...在smp系统中,为了减少处理器间通信开销,基本上每个cpu都会具备一个属于自己本地timer_device,独立地为该cpu提供时钟事件服务,smp中每个cpu基于本地timer_device,建立自己高精度定时器...上面三种时间通过 xtime变量计算,xtime会在系统启动时候通过从rtc获取值来初始化,之后通过每次时钟中断时候,加上当前时间和上次中断产生时间差值。...可能会有的疑问:为什么需要维护xtime,每次需要获取时间时候读取rtc不就好了?但其实读取rtc也有缺点,比如: 读取rtc效率不高,所以一般只在初始化时候维护一次。

    39810

    你可能不知道setInterval

    setInterval不能确保每次调用都能执行。...setTimeout(() => { // 程序主逻辑代码 // 循环递归调用 fn(); }, 1000); } fn(); 可是使用setTimeout后,我们又可能会遇到一个问题,就是计时器下次触发时间是在当前触发时间上开始计算...这对于第二个坑这种情况是合理,可是有时候我们又希望它能“匀速”地被触发。也就是说,希望计时器触发时间尽可能在计时器注册时间+周期*delay附近。...写了一个简单函数来实现这一点:一开始调用该函数时候,会记录当前计时器注册时间,以及一个用来统计计算器调用次数变量。...之后在每次调用newFn时候,都会使用预期下次发生时间减去当前时间来得到一个精确delayTime。这样至少可以保证在一些情况下,计时器可以稍微精确执行。

    1.9K20

    通过 React Hooks 声明式地使用 setInterval

    不关心为什么这样实现读者,就不用继续阅读了。下面的内容是为希望深入理解 React Hooks 读者而准备。 --- 哈?! 知道你想什么: Dan,这代码不对劲。...开始之前,先介绍下这份实现能力。 --- 为什么 useInterval() 是一个更合理 API?...可是为什么在 Hooks 里使用 setInterval 和 clearInterval 这么让人恼火? 回到刚开始计时器例子,我们尝试手动去实现它。...然而,这段代码有个诡异行为。 React 默认会在每次渲染时,都重新执行 effects。这是符合预期,这机制规避了早期在 React Class 组件中存在一系列问题。...--- React 组件 props 和 state 会变化时,都会被重新渲染,并且把之前渲染结果“忘记”一干二净。两次渲染之间,是互不相干

    7.5K220

    扩展属性(替代多表关联Join提升性能)

    NewLife.XCode是一个有10多年历史开源数据中间件,支持nfx/netstandard,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode。...整个系列教程会大量结合示例代码和运行日志来进行深入分析,蕴含多年开发经验于其中,代表作有百亿级大数据实时计算项目。...扩展属性为什么不写成 public Class Class => Class.FindByID(ClassID) 呢?...其实虽然看起来简单,但是还得考虑一个可能,同一个student对象可能多次访问student.ClassName,这么写岂不是每次访问都会执行Class.FindByID?...在XCode里面,根据主键而设计查询(如FindByID)往往带有很好缓存优化。 ? 如上,这是XCode默认生成代码,当Class表数据不足1000行时,走实体缓存。

    75620

    如何全面监控 iOS 千奇百怪崩溃

    前言 ---- App 上线后,我们最怕出现情况就是应用崩溃了。但是,我们线下测试好好 App,为什么上线后就发生崩溃了呢? 2....如何全面监控崩溃信息 ---- 收集崩溃日志最简单方法,就是打开 Xcode 菜单选择 Product -> Archive。...注意:但是这种查看日志方式,每次都是纯手工操作,而且时效性较差。...▐ 5.1 为什么要实现持久化存储 注意:这是因为,在保存完这些堆栈信息以后,App 就崩溃了,崩溃后内存里数据也就都没有了。...除了崩溃日志外,崩溃监控平台还需要对所有采集上来日志进行统计。以腾讯 Bugly 平台为例,和你一起看一下崩溃监控平台一般都会记录哪些信息,来辅助开发者追溯崩溃问题。 ?

    2.1K20

    三十天学不会TCP,UDPIP网络编程 -- RTT计算

    如果对和程序员有关计算机网络知识,和对计算机网络方面的编程有兴趣,虽然说现在这种“看不见”东西真正能在实用中遇到机会不多,但是始终觉得无论计算语言,热点方向怎么变化,作为一个程序员,很多基本知识都应该有所了解...而超时重传机制中最最重要就是超时计时器时间选择了,很明显,在工程上,在数据发送过程中,如果用一个固定值一直作为超时计时器时长是非常不经济也非常不准确方法,所以这一篇就来说说TCP中超时计时器设计哲学...之间,为什么这样取,也不知道,至今也没有找到原因。...对于这第一个公式,具体实际中做法是这样,首先采样几次RTT值,然后在第一次迭代时候SRTT初始值为RTT,后面就是根据每次计算出来SRTT来计算就行了。...LBOUND是一个下限时间,比如1秒钟,β,哈哈,又是一个神奇参数,取值在1.3到2.0之间,叫做延迟方差因子,到底取啥,为什么取这个值,,还是不知道。

    2.1K100

    iOS App怎么上架到苹果TestFlight?

    以上是记忆中解决方法及打包发布到testflight应该处理。 时间一长就会忘记,还是记录下,当然如果您碰到了相关问题,希望能帮到您。 不当之处,可以相互学习,共同提高。...Account 打开会员中心,然后点击App Store Connect,去构建您项目,这样就可以提交到TestFlight 让专业人员去帮你审核了,审核通过,都会给你发Email。...bundle)本身使用哈希算法计算摘要,若与上一步得到摘要一致,则证明此 App 未被篡改过,即内容完整。...理解: 1、我们在xcode中进行了配制,这样xcode就可以通过我们提供Provisioning Profile证书来安装APP到手机上, 手机上也会有一份这样配制,不然,启动APP时候也不会成功...还记得以前用免费APP ID进行开发时候,有时候第二天就过期,有时候过个3,5天过期,一点就一闪,其实是证书过期了, 每次安装APP时候,都会连网去验证合法性。

    1.4K20
    领券