1

当我运行以下代码时,命令行工具 Xcode 的控制台中没有打印任何内容:

import Foundation

class A {
  var someValue = 0

  let concurrentQueue = dispatch_queue_create("queue_for_property", DISPATCH_QUEUE_CONCURRENT)

  func increaseValueBy1000() {
    dispatch_barrier_async(concurrentQueue) {
      for _ in 0 ..< 1000 {
        let v = self.someValue + 1
        print(v)
        self.someValue = v
      }
    }
  }
}

let instance1 = A()

dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INTERACTIVE, 0)) {
  instance1.increaseValueBy1000()
}

instance1.increaseValueBy1000()

我在控制台中看不到任何打印语句。如果我删除障碍线效果很好。在这种情况下我做错了什么,为什么我的障碍不允许打印?

4

1 回答 1

6

应用程序——比如有命令行程序——还没有“运行循环”必须调用

dispatch_main() // Swift 2
dispatchMain()  // Swift 3

为了使用 GCD。从文档中:

此函数“停放”主线程并等待将块提交到主队列。调用UIApplicationMain (iOS)、NSApplicationMain(Mac OS X) 或CFRunLoopRun在主线程上的应用程序不得调用dispatch_main.

于 2016-05-05T06:40:03.640 回答