我需要用 ARC 销毁 Objective-C 中的信号量吗?

Do I need to destroy semaphores in Objective-C with ARC?

我正在根据 post 的建议开发 iOS Core Audio:Core Audio render thread and thread signalling

在使用 dispatch_semaphore_t 的更新答案中,我了解到在阅读此 post 后启用 ARC 时我不需要调用 dispatch_releaseDoes ARC support dispatch queues?.

但是,在使用 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);

提前致谢!

是的,您需要手动销毁 Mach 信号量。 ARC 不会自动管理 Mach 信号量。并且,与调度信号量类比,如果 ARC 确实管理它们,它将不允许使用 semaphore_destroy()。如果它不是不允许的,那么你可以而且应该使用它。

请注意,Mach 信号量不是引用计数。没有保留和释放操作,只有创建和销毁。强引用或不安全未保留引用之间没有区别。实际上,所有引用都是不安全的。没有引用计数,ARC 无法推断信号量对象,因为它们通过代码传递。