【问题标题】:Is -[NSOperationQueue currentQueue] reliable?-[NSOperationQueue currentQueue] 可靠吗?
【发布时间】:2014-03-10 15:47:41
【问题描述】:

无论如何我都知道GCD's dispatch_get_current_queue has been deprecatedit is an anti-pattern to use it for callbacks,但是-[NSOperationQueue currentQueue] 是否可靠使用,或者它是否遇到与GCD 的dispatch_get_current_queue 相同的问题? (我只是想要它,这样我就可以在我的操作执行时断言我在正确的队列中。)

【问题讨论】:

  • 您担心操作可能在错误的队列上执行?
  • 是的。如果代码发生更改,则可能有人将操作放在错误的队列中。
  • @Catfish_Man 你对改写问题有什么建议,还是你想自己改写?

标签: objective-c grand-central-dispatch nsoperationqueue foundation


【解决方案1】:

dispatch_get_current_queue 没有被弃用,因为它不可靠。它已被弃用,因为除了断言之外几乎所有它的使用都是一个坏主意,并且因为可能有多个同时存在的当前队列。

NSOperationQueue 不支持目标队列或同步执行,这是后一个问题在 dispatch 中存在的两个原因,所以它应该可以用于断言。

【讨论】:

  • 但是如果多个队列可以是当前队列,为什么dispatch_get_current_queue 在断言中使用是安全的?如果您在两个队列中,是否有可能返回错误的队列?还是dispatch_get_current_queue 总是返回当前块最近被分派到的队列?
  • dispatch_get_current_queue 可完全安全地用于断言。 -[NSOperationQueue currentQueue] 没有这个问题,因为 NSOperationQueue 没有调度队列所具有的某些功能。
  • 好的,所以当你说“除了断言之外所有使用 [dispatch_get_current_queue] 都是一个坏主意”,你的意思是你需要知道 GCD 队列永远不会与另一个队列同时使用为了在断言中使用它?
  • 是的,完全正确。在断言中使用它很棘手,但可以在有限的情况下使用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-05
  • 2013-01-18
  • 2011-08-26
  • 2011-01-08
  • 2021-04-02
  • 1970-01-01
  • 2013-08-13
相关资源
最近更新 更多