每秒 运行 一个 NSTimer 会有多大的负担?

How taxing would running an NSTimer every second be?

我有一个基于时间戳的 locked/unlocked 信息表视图。

如果我有单元格 A B 和 C,并且根据从 Firebase 提取的时间戳,它们分别在 30 秒、1 分钟和 1 分钟 30 后解锁,我需要一种方法来检查这些时间戳以解锁它们,也就是启用它们能够 select 单元格。

我能想到的唯一方法是设置一个每秒 运行s 的 NSTimer 来检查一个 Post Class 的数组,它有一个时间戳属性和锁定属性。当视图加载时,我会检查时间戳并最初根据时间戳设置锁定属性,然后 NSTimer 将每秒 运行 并将 posts 时间戳与其 "unlock" 进行比较日期。如果 post 准备好解锁,其 "locked" 变量将切换为 "false" 并且用户将能够单击它。

因为我也在单元格上显示带有图像的 locked/unlocked 内容,所以这将需要每秒重新加载 tableview 以保持锁定的图像是最新的。这听起来很糟糕。

有什么好的方法可以做到吗?或者这样可以吗?

几个想法:

  1. 根据您描述的场景,tableview 不需要每秒重新加载。你会 checking 计时器每秒触发一次,但只有当有问题的帖子实际需要解锁时才需要重新加载(似乎大约以 30 秒为间隔,不是那个一点都不好)。

  2. 如果你能找出需要重新加载的单元格的索引,你可以直接调用reloadRows(at indexPaths: [IndexPath], with animation: UITableViewRowAnimation) UITableView方法。这将避免更新整个 tableview 以重新加载单个行,并且如果您因行重新加载太多而遇到跳动,则可以稍微改善 UX。 Documentation here

  3. 如果您担心实际计时器每秒触发一次,但又知道您的行数有限(特别是如果您列出的只有 3 行),那么您可以单独创建一个在适当的时间(30 秒、1 分钟等)触发的每一行的计时器。但是,每秒触发一个计时器并没有什么大不了的,应该不会导致任何明显的性能问题。