Индексный поток CoreSpotlight по умолчанию безопасен
В документации упоминается: https://developer.apple.com/reference/corespotlight/cssearchableindex?language=objc
В пакетном режиме клиент берет на себя ответственность за защиту частного экземпляра CSSearchableIndex от одновременного доступа из нескольких потоков; одновременные вызовы экземпляра индекса имеют неопределенные результаты.
Но это не упоминает, что происходит в не пакетном режиме. Допустим, я использую поисковый индекс по умолчанию, и индексация занимает не тривиальное время (1-2 секунды). Я звоню
indexSearchableItems:completionHandler:
и пока эта индексация еще продолжается, я могу позвонить
indexSearchableItems:completionHandler:
снова? Или я должен сам защитить экземпляр Searchable Index по умолчанию от одновременного доступа?
1 ответ
В соответствии с документами, если мы создаем частный CSSearchableIndex, то наша обязанность защищать его от многопоточного доступа. CSSearchableIndex по умолчанию является поточно-ориентированным. Я использую indexSearchableItems: завершение Handler: на defaultSearchableIndex из нескольких фоновых потоков и никогда не сталкивался с состоянием гонки или сбоя.