我需要用 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_release
:Does 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 无法推断信号量对象,因为它们通过代码传递。
我正在根据 post 的建议开发 iOS Core Audio:Core Audio render thread and thread signalling。
在使用 dispatch_semaphore_t
的更新答案中,我了解到在阅读此 post 后启用 ARC 时我不需要调用 dispatch_release
:Does 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 无法推断信号量对象,因为它们通过代码传递。