【问题标题】:Do I need to destroy semaphores in Objective-C with ARC?我需要用 ARC 销毁 Objective-C 中的信号量吗?
【发布时间】:2019-07-24 15:43:51
【问题描述】:

我正在按照这篇文章的建议开发 iOS Core Audio:Core Audio render thread and thread signalling

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

但是,在使用 semaphore_t 时的原始答案中(请参见下面的代码 sn-ps),我无法找到在 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);

提前谢谢你!

【问题讨论】:

    标签: objective-c automatic-ref-counting semaphore


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-01
      • 2020-04-06
      • 2012-06-25
      • 2011-10-27
      • 1970-01-01
      • 2017-07-31
      • 1970-01-01
      相关资源
      最近更新 更多