2017-12-04 6 views
0

私は現在Swift 3.0で働いています。 Dispatch_Queueに配置された関数から呼び出された関数も同じDispatch_Queueに配置されているのか、またはMainに戻されているのでしょうか?dispatch_queueの親関数から呼び出された関数は、mainまたはdispatch_queueに配置されますか?

この例では、呼び出されたparentFunction1()がMyQueueに置かれているか、calledFromParentFunction()がmainで呼び出されなかったので、calledFromParentFunction()がMyQueueから呼び出されたのかどうか疑問に思っています。明示的にMyQueueを呼び出していませんか?

let MyQueue = DispatchQueue(label: "My Queue", attributes: [], target: nil) 

parentFunction1() { 
    calledFromParentFunction() 
} 

calledFromParentFunction() { 
    print("Is this on Main or MyQueue?") 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 
    MyQueue.async { [unowned self] in 
     parentFunction1() 
    } 
} 
+0

'Thread'は' class var isMainThread:Bool'と記述されたメソッドを持ち、特定のコードパスを知るのに役立つかもしれません。 –

+2

特定のコードがない限り、コールスタック全体が同じキューに置かれます。 – rmaddy

+0

ありがとうございました! – TheMuffinMan834

答えて

1

カスタムキューにあります。

func calledFromParentFunction() { 
    let name = __dispatch_queue_get_label(nil) 
    let queue = String(cString: name, encoding: .utf8)! 
    print("This is on", queue) 
} 
+0

偉大な、私は多くを考え出したが、二重チェックしたい。ありがとうございました! – TheMuffinMan834

関連する問題