如何在不使用 viewWillDisappear 的情况下使 NSTimer 无效/取消初始化?

2024-06-19

var faderTimer: NSTimer?
override func viewDidLoad() {
    super.viewDidLoad()

    self.faderTimer = NSTimer.scheduledTimerWithTimeInterval(self.fadeTime, target: self, selector: Selector("fadeBackground"), userInfo: nil, repeats: true)
}

我需要在控制器取消初始化之前使该计时器无效。

deinit {
    //never gets called
    if let timer = self.faderTimer {
        self.faderTimer!.invalidate()
        self.faderTimer = nil
    }
}

但是,我不能将它放在 deinit() 中。看来我必须使它无效viewWillDisappear。但是,我不想这样做,因为它会扰乱背景切换。 (从后台返回不会调用 viewWillAppear,所以我必须使用通知来启动计时器,这是一个巨大的痛苦。)我宁愿在 viewDidLoad 上启动计时器并在 deinit() 上停止它。


我宁愿启动计时器viewDidLoad并停止它deinit()

好吧,你不能。计时器正在保留你(self),并将继续这样做,直至其失效。这意味着除非您采取措施使其他地方的计时器无效,deinit永远不会被称为并且视图控制器将会泄漏(它永远不会消失,它所持有的所有记忆及其所有属性都将继续保留)。你must找到另一个地方使计时器失效;就是那样子。

如果你不喜欢这样,那么不要使用 NSTimer。使用 GCD 和dispatch_source_t反而。这样做的优点是它基于块(闭包) - 并且您可以使用weak self or unowned self在块内以防止自己被保留,因此您可以使计时器无效deinit如果你想。这正是我创建一个基于GCD的定时器类 https://github.com/mattneub/Programming-iOS-Book-Examples/blob/master/bk1ch12p499timerLeaker2/ch12p325NotificationLeaker/CancelableTimer.swift,作为 NSTimer 的替代品。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在不使用 viewWillDisappear 的情况下使 NSTimer 无效/取消初始化? 的相关文章

随机推荐

  • GET 数据是否也在 HTTPS 中加密?

    当你拿到时 https crypted google com search q s https encrypted google com search q s Is the s查询已加密 还是只是回应 如果不是 为什么谷歌还要对其公共内容进
  • 确定是否向 Firebase 实时数据库添加或删除数据

    每当添加新帖子时 我都会尝试将通知推送到 Android 应用程序 但是 只要数据 更改 即即使帖子被删除 我不需要 通知也会到达 我如何设置一个条件 以便 FCM 仅在添加帖子时才发送通知 这是我的 index js 文件 const f
  • 使用jquery和css点击按钮后旋转div文本

    我想使用 jquery 和 css 单击按钮后旋转 div 文本 如果用户点击Rotate Left按钮 然后文本在左侧旋转 or用户点击Rotate Right按钮然后文本在右侧旋转 Example div Happy Birthday
  • while 循环中的表并排

    in a while loop its creating a list of heading and image links i want to display it as side by side like in following im
  • 使用宏从 Excel 电子表格中删除任何非指定字符

    我正在尝试通过删除任何非标准字符来清理 Excel 中的 CSV 文件 我唯一关心保留的字符是 A Z 0 9 和一些标准标点符号 任何其他字符 我想删除 当它找到包含我未指定的任何字符的单元格时 我已经得到了以下宏来删除整行 但我不确定如
  • 如何在 Angular 2 karma jasmine 测试中从 JSON 文件加载模拟数据?

    我在写信业力茉莉花测试用例角2 我们遇到了在单独的 JSON 文件中模拟数据的需求 因为数据很大 希望确保代码整洁 为此我进行了很多搜索但没有找到合适的解决方案 我们已经使用以下方式模拟 HTTP 服务模拟后端 所以我们不能使用Angula
  • 启动nodejs时出错:openssl配置失败

    启动 Express 节点时出现以下错误 openssl 配置失败 错误 02001003 系统库 fopen 没有这样的 过程 节点无论如何都会启动 我没有尝试使用 SSL 这是起始代码 app Express app set port
  • PHP 和 MySQL - 高效处理多个一对多关系

    我正在寻求一些有关使用 MySQL 和 PHP 检索和显示数据的最佳方法的建议 我有 3 个表 所有一对多关系如下 Each SCHEDULE有很多覆盖每个覆盖都有很多地点 我想检索这些数据 以便它可以全部显示在单个 PHP 页面上 例如列
  • 正则表达式 - 将 target="blank" 添加到我的内容中的所有 标记链接

    有人可以帮我在 C net 中创建一个正则表达式来添加target blank to all a 在我的内容中标记链接 如果链接已经设置了目标 则将其替换为 blank 目的是在新窗口中打开我的内容中的所有链接 感谢你的帮助 dotnet岩
  • Oracle:如何获取刚刚插入的行的序列号?

    如何获取刚刚插入的行的序列号 插入 返回 declare s2 number begin insert into seqtest2 x values aaa returning seq into s2 dbms output put lin
  • 使用 Hive 计算文本变量的单词频率

    我有一个变量 每一行都是一个句子 例子 Row1 Hey how are you Rwo2 Hey Who is there 我希望输出是按单词分组的计数 Example Hey 2 How 1 are 1 我正在使用 split a bi
  • 在 React 应用程序中简单连接到 mongodb

    我使用 create react app 创建了简单的反应应用程序 这个应用程序包含表单 验证和引导程序 没有什么花哨的东西能像魅力一样发挥作用 我还注册了 mongo 以获得免费集群 以便我可以发送一些数据 所以我有这个网址 mongod
  • &(与符号)和 && 或 | 之间的区别(管道)和||在 Objective-C 中?

    我想知道Objective C是否关心我是写 还是 我相信一个与号 会或应该导致如果左侧已经为假 则右侧将不会被评估 这适用于 Objective C 吗 Yes 这些运算符在 C 和 Objective C 中的功能相同 就像在 C 中一
  • Grep 批量 ping

    寻找一种更好的方法来做到这一点 而不是我习惯的 手动 方法 因为这是一个我必须定期经历的过程 我有一系列要 ping 的 IP 从10 0 1 15 to 10 0 50 15 第三个八位位组指的是物理位置 最后一个八位位组指的是该位置处的
  • 使用 docker for windows 工具箱切换到 Windows 容器

    我已经在 Windows 7 64 位操作系统上安装了 docker for windows toolbox 我无法使用 docker 菜单切换到 Windows 容器 因为 docker 图标在系统托盘中不可用 Docker 服务也不可用
  • 如何将配置文件添加到 Eclipse 中的默认 Maven 目标?

    我在 Eclipse 中使用 Maven 来构建和部署代码 选择时 Context Menu gt Run As 几个Maven目标如下 据我所知 如果我想创建自定义构建配置 我会单击 运行配置 来创建自定义配置 然而 似乎没有办法修改菜单
  • 如何使用 django Rest 框架通过直通模型序列化 ManyToManyField

    我有一个 Recipe 模型 其中包含 IngredientType 对象的 M2M 字段 该字段 又名成分列表 通过 Ingredient 对象使用臭名昭著的 through 模型 该对象将额外的数据添加到我的 IngredientTyp
  • Informix 中的组索引

    我有一张桌子叫hitlist 有 3 列 int id long hitlisted date long deleted date 我将根据这些列查询该表 histlisted date frequent hitlisted date de
  • 如何编写 PMPI 库来包装 MPI 函数

    我正在尝试编写 PMPI 库 但不确定正确的步骤 库和链接的新手 我编写了一个包装 MPI Send 函数的基本文件 假设它是一个名为 lib c 的文件 我应该执行哪些步骤 以便当我使用 MPI Send 运行 c 代码时 我的包装器代码
  • 如何在不使用 viewWillDisappear 的情况下使 NSTimer 无效/取消初始化?

    var faderTimer NSTimer override func viewDidLoad super viewDidLoad self faderTimer NSTimer scheduledTimerWithTimeInterva