You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xcode开发点击器游戏如何实现永久循环且不造成软件卡死

问题原因

你写的while true是无限死循环,会在当前线程持续不断地向主队列提交延迟执行任务,瞬间就会把任务队列占满,主线程无法响应其他操作,自然会导致Xcode和App都卡死。

正确实现方案

iOS里做固定间隔的重复任务,最适合的工具是Timer,实现步骤如下:

  • 首先在你的控制器类中声明一个Timer属性,用来持有定时器实例,方便后续管理:
// 声明在类的属性区域
var autoAddTimer: Timer?
  • 在你要触发自动加成的按钮点击事件里,初始化并启动定时器:
@IBAction func startAutoAddButtonTapped(_ sender: UIButton) {
    // 先停止之前可能存在的定时器,避免重复创建
    autoAddTimer?.invalidate()
    // 初始化定时器,每隔1秒触发一次回调
    autoAddTimer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true, block: { [weak self] _ in
        guard let self = self else { return }
        self.clicks += self.helpers
        self.ClickLable.text = "Clicks: \(self.clicks)"
        print(self.clicks)
    })
}
  • 如果需要停止自动加成(比如玩家关闭功能、退出当前页面时),销毁定时器即可:
// 停止定时器调用
autoAddTimer?.invalidate()
autoAddTimer = nil
注意事项
  • 代码中的[weak self]是为了避免循环引用导致控制器无法释放,造成内存泄漏
  • 通过scheduledTimer创建的定时器默认会运行在主线程的RunLoop中,回调里可以直接更新UI,不需要额外调用DispatchQueue.main.async
  • 每次启动定时器前先调用invalidate停止旧定时器,避免多次点击按钮生成多个重复定时器的问题

内容的提问来源于stack exchange,提问作者my_expendableaccount

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 19:45:08