2016-10-14 2 views
0

У меня есть табличное представление информации, которая заблокирована/разблокирована на основе временных меток.Как будет облагаться налогом NSTimer каждую секунду?

Если у меня есть ячейки AB и C, они разблокируются через 30 секунд, 1 мин и 1 мин 30 соответственно на основе временных меток, вытащенных из Firebase, мне нужен способ проверить эти временные метки, чтобы их разблокировать, возможность выбора ячейки.

Единственный способ, которым я могу это сделать, - настроить NSTimer, который запускается каждую секунду, чтобы проверять массив Post Class, который имеет атрибут timestamp и заблокированный атрибут. Когда загружаются представления, я проверяю метку времени и сначала устанавливаю заблокированный атрибут на основе метки времени, а затем NSTimer будет запускаться каждую секунду и сравнивает отметку времени сообщений с ее «разблокировкой» даты. Если сообщение готово разблокировать, его «заблокированная» переменная отключится до «false», и пользователь сможет щелкнуть по ней.

Потому что я показываю, что заблокировано/разблокировано с изображением на ячейке, а это потребует перезагрузки в таблице просмотра каждую секунду, чтобы обновить заблокированное изображение. Это звучит ужасно.

Есть ли хороший способ сделать это или будет делать это так, как хорошо?

ответ

3

Несколько мыслей:

  1. TableView не нужно будет перезагрузить каждый второй на основе сценария, которую вы описали. Вы должны были бы проверять каждую секунду, когда срабатывает таймер, но его нужно будет перезагрузить, только если соответствующие сообщения нужно разблокировать (похоже, это примерно с интервалом в 30 секунд, но это совсем не так).

  2. Если вы можете вычислить индекс ячеек, которые необходимо перезагрузить, вы можете просто вызвать метод reloadRows(at indexPaths: [IndexPath], with animation: UITableViewRowAnimation)UITableView напрямую. Это позволит избежать обновления всего табличного представления, чтобы перезагрузить одну строку и немного улучшить UX, если вы испытываете перегруженность из-за чрезмерной перезагрузки строк. Documentation here

  3. Если вы беспокоитесь об актуальном срабатывании таймера каждую секунду, но знаете, что у вас есть конечное количество строк (особенно если оно всего 3, как вы указали), тогда вы можете просто создать отдельный таймер для каждой строки который срабатывает в соответствующее время (30 секунд, 1 минута и т. д.). Тем не менее, один таймер, срабатывающий каждую секунду, не является большой сделкой и не должен вызывать каких-либо заметных проблем с производительностью.

+0

Большое спасибо. Все хорошие моменты. Вы также очень правы в отношении проверки таймера и на самом деле не нуждаетесь в перезагрузке. Это будет значительно лучше. – user6820041