每秒运行NSTimer的费用是多少?

时间:2016-10-14 19:31:13

标签: ios swift uitableview nstimer

我有一个基于时间戳锁定/解锁的信息的表格视图。

如果我有单元格AB和C并且根据从Firebase中提取的时间戳分别在30秒,1分钟和1分钟30分钟内解锁,我需要一种方法来检查这些时间戳来解锁它们,也就是说让它们能够选择单元格。

我能想到这样做的唯一方法是设置一个每秒运行一次的NSTimer,以检查具有时间戳属性和锁定属性的Post类数组。当视图加载时,我会检查时间戳,并根据时间戳初始设置锁定属性,然后NSTimer将每秒运行一次,并将帖子时间戳与其“解锁”日期进行比较。如果帖子准备解锁,其“锁定”变量将关闭为“false”,用​​户将能够点击它。

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

有没有一种好方法可以做到这一点,或者这样做会好吗?

1 个答案:

答案 0 :(得分:3)

几点想法:

  1. 根据您描述的方案,tableview不需要每秒重新加载一次。您将每隔一秒钟检查计时器触发,但只有在有问题的帖子实际需要解锁时才需要重新加载(看起来大约间隔30秒,而不是那么糟糕) )。

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

  3. 如果您担心实际的定时器每秒触发,但知道您的行数有限(特别是如果它只是您列出的3行),那么您可以为每行创建一个单独的计时器在适当的时间(30秒,1分钟等)发射。但是,每秒发射一次计时器并不是一件大事,也不会引起任何明显的性能问题。