我正在按照这篇文章的建议开发iOS Core Audio:Core Audio render thread and thread signalling。
在使用dispatch_semaphore_t
的更新答案中,我理解在阅读此帖后启用ARC时我不需要调用dispatch_release
:Does ARC support dispatch queues?。
但是,在使用semaphore_t
时的原始答案中(参见下面的代码片段),当启用ARC时,我无法通过调用semaphore_destroy
来查找是否需要销毁信号量的参考。有人可以帮忙吗?
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无法推断信号量对象,因为它们通过代码传递。