2016-08-21 3 views
4

NSOperationQueueクラスは、NSOperationインスタンスが実行されるディスパッチキューを設定するために使用されるunderlyingQueueプロパティを持っています。このプロパティの値は、このテーマにはより詳細な説明がないと思われdispatch_get_main_queueメインキューをNSOperationQueueの基底キューとして設定する

によって返された値であってはなりません

:しかし、公式ドキュメントがあること

let dispatchQueue = dispatch_queue_create("custom.queue", DISPATCH_QUEUE_SERIAL) 
let opQueue = NSOperationQueue() 
opQueue.underlyingQueue = dispatchQueue 

を述べてアップルから。ただし、メインキューをunderlyingQueueとして使用しても、エラーは発生せず、不要な動作も発生しません。これの背後にある理由は何ですか?

+0

メインキューを使用する場合は、なぜ 'dispatch_queue_create'を呼び出すのですか? 'dispatch_get_main_queue'を使用してください。 – rmaddy

+0

'dispatch_queue_create'は、' underlyingQueue'プロパティを設定する方法の例としてのみ使用されます。ドキュメントから分かるように、 'dispatch_get_main_queue'は基底のキューとして使用すべきではありません。 –

答えて

2

多くの理由が考えられます。デッドロックの可能性が浮かび上がってきますが、Appleに決定的な答えを尋ねる必要があります。

オペレーション全体がメインキューで実行される必要がある場合は、NSOperationQueue.mainQueueを使用してメインスレッドに関連付けられた操作キューを取得できます。メインキューで実行する必要がある操作の一部(UI要素の更新など)が必要な場合は、その操作を必要に応じて同期または非同期でメインキューにディスパッチするだけです。

関連する問題