Как правильно освободить семафор?

Шаги для воспроизведения сбоя:
если вызывается semaphore.wait(), а затем деинициализируется контроллер представления, которому он принадлежит, перед вызовом semaphore.signal, приложение аварийно завершает работу.

Получение ошибки ниже при dinit класса:

      EXC_BAD_INSTRUCTION with the message "BUG IN CLIENT OF LIBDISPATCH: Semaphore object deallocated while in use"

Использовал:

      let semaphore = DispatchSemaphore(value: 1)

Но странное добавление нижеприведенного кода в deinit устраняет проблему сбоя, не знаю почему.

       while (semaphore.signal() != 0) {}

Так есть ли правильное решение?

0 ответов

Другие вопросы по тегам