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

使用Timer.publish时iOS 14的奇怪行为

在iOS 14中使用Timer.publish时,存在一个奇怪的行为。Timer.publish是一个在SwiftUI中用于创建计时器的函数,它允许我们在指定的时间间隔内执行操作。

这个奇怪的行为是指在iOS 14中,Timer.publish的计时器可能不会按照预期的时间间隔触发。这可能导致计时器的执行时间与我们期望的不一致。

这个问题可能与iOS 14中对定时器的内部实现方式有关。由于苹果没有公开的文档解释这个问题,因此我们无法得知具体原因。

解决这个问题的方法之一是使用Timer.TimerPublisher替代Timer.publish。Timer.TimerPublisher是一个用于创建计时器的发布者,它更加可靠并且没有这个奇怪的行为。

以下是一个示例代码,演示了如何使用Timer.TimerPublisher创建一个计时器:

代码语言:txt
复制
import Combine
import SwiftUI

class TimerViewModel: ObservableObject {
    @Published var counter: Int = 0
    private var cancellable: AnyCancellable?
    
    func startTimer() {
        cancellable = Timer.publish(every: 1.0, on: .main, in: .default)
            .autoconnect()
            .sink { _ in
                self.counter += 1
            }
    }
    
    func stopTimer() {
        cancellable?.cancel()
    }
}

struct TimerView: View {
    @ObservedObject var timerViewModel = TimerViewModel()
    
    var body: some View {
        VStack {
            Text("Counter: \(timerViewModel.counter)")
                .font(.largeTitle)
                .padding()
            
            Button(action: {
                self.timerViewModel.startTimer()
            }) {
                Text("Start Timer")
                    .padding()
                    .background(Color.blue)
                    .foregroundColor(.white)
                    .cornerRadius(10)
            }
            
            Button(action: {
                self.timerViewModel.stopTimer()
            }) {
                Text("Stop Timer")
                    .padding()
                    .background(Color.red)
                    .foregroundColor(.white)
                    .cornerRadius(10)
            }
        }
    }
}

struct ContentView: View {
    var body: some View {
        TimerView()
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

在上述示例代码中,TimerViewModel类使用Timer.TimerPublisher创建计时器,并在每秒钟触发。TimerViewModel作为一个ObservableObject被观察,当计时器触发时,更新counter属性的值。TimerView是一个展示计时器和按钮的视图。

此外,腾讯云也提供了一系列与计时器相关的产品和服务,用于满足不同的需求和场景。您可以通过腾讯云官方网站或文档了解更多信息。

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

相关·内容

使用了 iOS 14 发布的翻译工具,觉得还差点儿意思

关键词:WWDC2020 翻译软件 机器学习 北京时间 6 月 23 日凌晨,WWDC 2020 在线上召开,期间 Apple 发布了全新的 iOS 14 系统,公布了多项重大产品改进和功能升级,其中包括一款新...官方对 Translate 的翻译效果进行演示 Translate 利用 Apple 高超的的机器学习技术,和强大的 Neural Engine,可以在聊天中为 11 种不同的语言提供快速、自然的语音和文本翻译...我们更新了 iOS 14 Public Beta 版本,进行了简单测试。 首先我们尝试输入一句法语,发现 Translate 可以精准地将输入的短句转换为英语和中文简体。 ?...联网状态下测试,常规语句翻译完全没问题 但是当我们关闭 WiFi 和蜂窝网络后发现,Translate 的语音和文字输入功能都无法使用,即官方宣传的「APP 可以离线使用」,在 iOS 14 beta...离线功能当下无法使用,可能是 beta 版本的 bug,让我们给 Apple 一些时间,给技术一些时间,静等秋季的 iOS 14 正式版吧!

1.2K10
  • 如何为非常不确定的行为(如并发)设计安全的 API,使用这些 API 时如何确保安全

    .NET 中提供了一些线程安全的类型,如 ConcurrentDictionary,它们的 API 设计与常规设计差异很大。如果你对此觉得奇怪,那么正好阅读本文。...本文介绍为这些非常不确定的行为设计 API 时应该考虑的原则,了解这些原则之后你会体会到为什么会有这些 API 设计上的差异,然后指导你设计新的类型。...无论写上面哪一段代码,都面临着问题: 此刻调用的那一句话得到的任何结果都仅仅只表示这一刻,而不代表其他任何代码时的结果。...而后者,此时访问得到的字典数据,和下一时刻访问得到的字典数据将可能完全不匹配,两次的数据不能通用。...为 0,表示任务真的已经完成,随后退出 while 循环; 你可以注意到我们的 lock 是用来确认一开始 isRunning 为 1 时的那个不确定的状态的。

    17320

    解析SwiftUI布局细节(二)循环轮播+复杂布局

    NavigationView + NavigationLink 的界面跳转,在苹果给的 SwiftUI 的使用例子中就是这样写的,当然我们在正常的使用中这样写也没啥问题,那我们界面跳转的问题是什么呢?...传送门在这 下面是我们值得细说的一些点: 1、值得注意的 TabView + PageTabViewStyle 这是在iOS14中新出的一个值得我们注意的点,PageTabViewStyle...有一个还得说明一下,GeometryReader 改变了它显示内容的方式。在 iOS 13.5 中,内容放置方式为 .center。在 iOS 14.0 中则为:.topLeading。...,SwiftUI对它进行了简化,具体的创建如下: /// SwiftUI对定时器的简化,可以进去看看具体参数的定义 private let timer = Timer.publish(every: 3,...homeViewModel: HomeViewModel /// SwiftUI 对定时器的简化,可以进去看看具体参数的定义 private let timer = Timer.publish

    12.2K20

    速速更新你的iPhone,新漏洞大得可怕,全球16.5亿台设备受影响

    距离上一个大版本 iOS 14.7 不到两个月,本周的苹果发布会不到两天,此时放出系统更新不免让人感觉有些奇怪——iOS 14.8 没有新功能,该紧急更新包含两个安全补丁,只为修复一个漏洞。...Citizen Lab 还表示,这个代号为「ForcedEntry」的安全漏洞似乎与 7 月国际特赦组织(Amnesty International)审查的一些系统攻击行为类似。...当时,安全研究人员写道,这是由苹果 CoreGraphics 系统中的一个错误导致的,并且发生在手机收到包含风险文件的短信后,尝试使用与 GIF 相关的功能时。...苹果的更新说明问题发生在处理恶意制作的 PDF 时,同时苹果在声明中感谢 Citizen Lab 完成了获取该漏洞样本的重要工作。...尽管时而有人吐槽「反向升级」,但保持设备系统的最新状态显然是一件利大于弊的事。对于苹果用户来说,在 9 月 14 日发布会前一天让 iOS 14 版本获得安全补丁的操作,让修复内容覆盖了更多设备。

    53330

    从 iOS 1.0到 iOS 14,一文看完iPhone14年变迁史

    今天我们就从一个全新的角度,来回看下iOS的演进史。 最近看到A14和M1的报道,是不是有点莫名烦躁? 大家可能都忘了最初的iOS是啥样了,如果把iOS各个系统文件拆一下,会是怎样的体验?...今天我们就来扒一下iOS的演进史,不过,我们是从一个奇怪的角度,矩阵树图! ? iOS的变迁史 What?2G的iPhone,发短信的年代回来了? 如果透视下文件大小,初代iPhone就长下面这样。...共享缓存是 iPhone OS 3.1中引入的一种缓存机制; 健康成为 iOS 14的一个重要特征; 在 iOS 14中有如此多的组件,要想看清所有的组件得拿个放大镜了。...为了更好的比较,我们将 iPhone OS 1.0与 iOS 14按一定比例放在一起,你会发现整个 iPhone OS 1.0基本上就只是 iOS 14壁纸的大小: ?...iPhone OS 1.0在2007年发布时,它重新定义了智能手机。现在 iOS 14包含了大量的智能组件。 通过树图的形势来观察一个系统,是不是变的很有意思,一些重要的特性变迁,清晰可见。

    96820

    OSLog与NSLog,OSLog的实践

    因此,为了线程安全,每次调用NSLog时,它都会打开一个新的asl客户端连接,发送消息,然后关闭连接。所以说,当这个过程出现N次时,消耗大量资源导致程序变慢也就不奇怪了。...系统为每个级别实现标准行为。可以使用日志命令行工具或自定义配置文件覆盖此行为(请参阅调试时自定义日志行为)。 default 默认级别的消息最初存储在内存缓冲区中。...DDOSLogger:在iOS10开始使用,在将Log输出到 控制台.app 和 Xcode控制台。跟NSLog的输出方式一致。当然,经过处理之后,性能会比直接使用NSLog要好。...而我们常用的NSLog会将日志写入到控制台.app和Xcode控制台。 所以,想要替换NSLog,官方推荐的做法是: 在iOS10及以上系统版本,使用DDOSLogger。...在iOS10以下版本,使用DDASLLogger+DDTTYLogger。

    1.3K20

    以小窥大:IO 卡顿探寻苹果文件系统

    us,但等待耗时波动很大,可以达到140 ms,也就导致了主线程每次查询图片存在状态时,单次调用耗时超过了140 ms,而滑动过程中大概存在十几次这样的行为,那最终就是每次滑动都要因为这些 I/O wait...由于 iOS 平台不支持自定义 dtrace (虽然Instruments 就是基于 dtrace 的,但 iOS 即便越狱了也没办法触发自定义 dtrace 行为), 我们只有基于 macOS 打开...{     r12 = arg0;     r14 = *(int32_t *)(arg0 + 0x40);     r14 = r14 & 0xfffffff7;     if (r14 < 0x3...二、解决问题 回到开始的卡顿问题,通过构造 demo 我们稳定复现了该问题,同时继续分析用户的相关数据,确认了用户遇到问题时的情况的确和我们最终 demo 构造的基本一致,至此又一个奇怪的卡顿问题终于找到原因了...HFS+ 能更好的利用磁盘空间,使用 unicode 存储文件编码,提供了更多当时来说更现代的文件系统支持。HFS+ 使用了 Catalog File 来存储目录结构。

    1K10

    iOS 14 egret H5游戏卡顿问题分析和部分解决办法

    调试过程中,发现两个比较奇怪的现象: 1、本来满帧运行,但运行一段时间后,会下降到40-50fps。...2、50个爆炸动画播放时能稳定在50fps,但增加到60个爆炸动画之后,fps会断崖式下跌,到14fps左右。...中反而变成了性能瓶颈,已针对做了处理(针对iOS14,每次drawCall使用不同的vertex buffer)。...那么,每次drawcall时,无论是多少个元素,哪怕只有1个元素(6个顶点)都会使用这个12288长度的index buffer。 从这个角度来看,确实可能存在优化的可能。...而且,在这个情况下,drawData要忽略offset,改为固定的0(offset是对应vertex buffer中包含多次drawcall数据时才使用,现在每次按需推送,所以就不需要offset了)。

    3.6K31

    iOS14适配汇总:【1、隐私权限相关:定位、相册、IDFA 2、KVC相关3、UIView相关;4、网络相关】

    比如发现了JCore iOS SDK在iOS 14引用剪贴板,该行为导致APP被用户怀疑隐私泄露,请予以重视 II、KVC相关的适配 iOS14 适配:【KVC 不允许访问 UIPageControl的...pageImage】解决方案:新增了API:preferredIndicatorImage设置image III、UIView相关的适配 Xcode 12 + iOS 14适配:pop多层控制器至主页时...,tabbar不显示问题 iOS14适配:【解决iOS14下pop多层控制器至首页时,tabbar不显示问题】方案1:重写pushViewController;方案2: hook hidesBottomBarWhenPush...cell.addSubView方法,因此与之对应的方法(UITableViewCell *)[SubView superview] 和cell.subviews方法 都要注意谨慎使用和处理 iOS14适配...所以从原理上看,QMUI 命中这个主线程检测是不可避免的,目前只是做了一些优化,只有真正使用了 QMUITheme 组件时才会出现这个情况,没使用的时候就不会命中,以减少一部分的出错场景。

    1.6K30

    为什么不推荐使用PHPicker

    WWDC 20 过去已经有好几个月了, iOS 14 正式版也发布了,这篇文章写的有点晚了,因为有些 API 没有彻底弄懂,所以一直拖到了现在(奇怪我怎么感觉去年也说过一样的话: doge)其实过了这么多个月...那么下面让我们一起看看什么是 PHPicker 以及 iOS 14 相册有什么新的变化。...PHPicker iOS 14 中系统新增了一个图片选择器 PHPicker,官方建议使用 PHPicker 来替代原有的 API 进行图片选择,下面我们来看看 PHPicker 的优点: 支持多选 支持搜索...14, *) case limited = 4 }复制代码 当用户在授权时选择了 “选择照片” 的选项时: 使用新 API 将会返回 limited case 使用旧 API 将会返回 authorized...如果没有自定义 Picker 的朋友可以考虑使用我们做的第三方图片选择框架 AnyImageKit。 以上就是 iOS 14 相册的改动以及 PHPicker 的全部内容,如有错误欢迎指出。

    2.6K40

    iOS10 Swift3.0 XCode 8 总结

    1,iOS10 新增的privacy settings iOS10添加了新的权限控制范围 如果你尝试访问这些隐私数据时得到如下错误: > This app has crashed because it...NSCameraUsageDescription key with a string value explaining to the > user how the app uses this data 因为它企图访问敏感数据时没有在应用程序的...(10_0); 奇怪的是UITableView并没有找到 isPrefetchingEnabled属性的定义 13,iOS10 UIScrollView 新增 refreshControl 属性 UIScrollView...14, Swif3.0 新增作用域访问级别 fileprivate 目前有如下访问级别: 公开(public) 内部(internal) 文件外私有(fileprivate) 私有(private) 15...-> Set 如果你坚持要使用inout var let关键字可以使用 `` 包裹参数标签 func addParameter(name: String, `inout`: Bool)

    79810

    如何符号化Objective-C调用栈如何符号化Objective-C调用栈

    demo app,并且在编译后期滤去了符号表,所以仅能看到一些奇怪的地址。...25904 为例 需要条件: (1)atos工具(Xcode安装时一般会自带) (2)确认app运行的架构(armv7、arm64) (3)app对应的dSYM文件(出包时获得) (4)app代码载入到内存的基地址...) 方法: 在命令行中输入: xcrun atos -arch arm64 -o ~/Library/Developer/Xcode/iOS\ DeviceSupport/10.3.1\ \(14E304...: -[UIApplication sendAction:to:from:forEvent:] (in UIKit) + 96 如何获取基地址 注意:基地址在进程每次启动时决定,所以重启进程后,符号化时必须使用当次启动的基地址...方案一:从iOS生成的crash日志中获取 在iOS系统生成的crash日志中的下半部分,有这样的一些信息: 蓝色框圈出来的部分,即为app代码载入到内存的基地址 红色框圈出来的部分,即为各个动态库载入到内存的基地址

    83610

    iTunes热门排行榜算法的数据分析

    这两个极不稳定日子的榜单排名变化的数量级高于平常——许多app来回变动,很多app很不稳定。 如果你是为iOS设备做app的,那么你肯定知道你app的成功取决于榜单上的排名。...苹果公司对这些行为视而不见 现在,让我们深入到数据中 在过去的一年,我收集了iTunes榜单的数据来分析他们的算法是如何计算的。我们在betaworks建立和输出了很多ios app。...为了更好的分析,我使用两个时间段的数据:14年3月——14年5月和14年8月——15年1月。因为这个原因,你会在下表看到六月中旬和八月之间有一个空隙。...十月末有一些奇怪的行为,Tinder排名上升了。十二月中旬,两个app在同一天都消失了。这里有两个漏洞我们一会深挖下。 我们来看看其他的例子....使用相关性 计算app之间的相关性可以帮助我们比较移动app的使用模式。相关性是一种计算两个对象的相互关系的方法。

    1.7K60

    苹果iOS 15发布:关机也能定位,ASMR重度用户狂喜,这波库克又“去苹果化”了

    新的通知界面,将APP图标放大到了正常大小,让不少网友感到不习惯,也有网友调侃这是变成了“老人机”: △iOS15 vs iOS14 不过,通知中新增的摘要功能还是有点意思的。...不过,在启动速度上,抖⾳启动⽐iOS 14慢了两秒多,农药则是慢了4秒左右。推测是因为有很多画⾯素材在更新后要重新下载到本地,所以变慢了。...续航似乎也问题不大,⼿机最高亮度,连接WiFi和蓝⽛⽿机,⾳量调到50%, 半⼩时农药耗电28%,半⼩时B站耗电22%,半⼩时抖⾳耗电20%,半⼩时知乎耗电14%,和iOS 14差不多。...除此之外,部分SE以下的网友玩了iOS15的梗,说出现了卡屏、开机界面4个苹果等奇怪的bug(其实升不了级)。 嗯……那么这次iPad更新的体验如何呢? iPadOS 15:这次真是生产力了?...One More Thing iOS15和iPadOS15不像13带来了深色模式,14新增的小组件这种大的功能更新。

    1.1K20
    领券