Я пытаюсь понять, как использовать флаг события kFSEventStreamEventFlagEventIdsWrapped
с FSEvents
.Как использовать kFSEventStreamEventFlagEventIdsWrapped с FSEvents?
В соответствии с документацией флаг отправляется зарегистрированным экземплярам, когда счетчик идентификаторов событий обертывается, что делает предыдущий идентификатор события устаревшим.
Теперь давайте представим себе следующий сценарий:
- зарегистрироваться для
FSEvents
в моем приложении; - По завершении обработки
FSEvents
(например, мое приложение завершает работу), я сохраняю последний идентификатор события, встречающийся при обработке событий, чтобы иметь возможность воспроизводить изменения с этого идентификатора; - Пока мое приложение не работает, счетчик идентификаторов событий обходит вокруг.
Мой вопрос: Как я должен знать, что счетчик обернут? (Таким образом, требуя, чтобы я повторно сканировать всю структуру каталогов.)
Я знаю, что идентификаторы событий _very_ вряд ли обернутся; вы не отвечаете на вопрос. Я просто пытаюсь понять, как _fully использовать API 'FSEvents'. (Кроме того, если идентификаторы событий не переносятся, зачем создавать флаг 'kFSEventStreamEventFlagEventIdsWrapped'?). Вы сказали в своем ответе перед выпуском, что я не должен сохранять идентификаторы событий на диск. Не могли бы вы уточнить?(Док, кажется, не согласен: «FSEventStreamGetLatestEventId() -> [...] Клиенты могут сохранять это значение постоянно, пока они также сохраняют UUID для устройства»). Спасибо за ваше время. – Frizlab
ну, я думаю, что упакованный флаг есть, потому что какой-то яблочный инженер действительно не понимал огромного пространства из 64-битных целых чисел. возможно, вы * можете * сохранить идентификатор события, но, возможно, он дважды обертывается, а ваше приложение не работает, что вы делаете? я имею в виду действительно, давай, он просто не обертывается. Просто распечатайте несколько идентификаторов событий, они похожи на 123_000_000, на компьютере, который длился годами. Даже если вы нашли способ обработать обкатку идентификаторов событий ... как бы вы ее реалистично протестировали? вы уверены, что инженеры Apple действительно тестировали, действительно ли этот флаг работает? если да, то как они? – Michael
Фактически вы можете сохранить идентификатор события, но вы также должны сохранить UUID потока событий с ним, поскольку идентификатор события действителен только для данного потока событий. UUID потока событий изменяется, когда счетчик обходит вокруг. См. Мой принятый ответ для получения дополнительной информации. – Frizlab