Нужно ли уничтожать семафоры в Objective-C с помощью ARC? - PullRequest
0 голосов
/ 03 марта 2019

Я работаю над iOS Core Audio, следуя предложению из этого поста: Core Audio визуализирует поток и сигнализацию потока .

В обновленном ответе, который использует dispatch_semaphore_t, я понимаю, что мне не нужно звонить dispatch_release, когда ARC включен после прочтения этого сообщения: Поддерживает ли ARC очереди отправки? .

Однако в исходном ответе, когда используется semaphore_t ( см. Фрагменты кода ниже ), я не могу найти ссылку на то, нужно ли мне уничтожить семафор, вызвав semaphore_destroyкогда ARC включен.Может кто-нибудь помочь, пожалуйста?

semaphore_t mSemaphore;

kern_return_t result = semaphore_create(mach_task_self(), &mSemaphore, SYNC_POLICY_FIFO, 0);

// Do stuff with semaphore wait and signal ...

kern_return_t result = semaphore_destroy(mach_task_self(), mSemaphore);

Заранее спасибо!

1 Ответ

0 голосов
/ 03 марта 2019

Да, вам нужно уничтожить семафоры Маха вручную.ARC не управляет автоматически семафорами Маха.И, по аналогии с диспетчерскими семафорами, если бы ARC управлял ими, это запретило бы использование semaphore_destroy().Если это не запрещено, то вы можете и должны использовать его.

Обратите внимание, что семафоры Маха не учитываются при подсчете ссылок.Там нет операций сохранения и освобождения, просто создать и уничтожить.Там нет никакой разницы между сильной или небезопасной непридерживаемой ссылкой.Все ссылки, по сути, небезопасны.Без подсчета ссылок ARC не может рассуждать об объектах семафора, поскольку они передаются через код.

...