2016-08-21 32 views
0

最近Swiftでマルチスレッドの学習を始めました。NSOperationQueueNSOperationのクラスを使って基本的なマルチスレッドを試したかったのです。 (Xcodeでコマンドラインツールのプロジェクトの).swiftファイルのグローバルスコープでNSOperationQueue操作が完了していませんか?

が、私はこの2つの関数を定義した:

func foo() { /* prints from 1 to 26 */ } 
func bar() { /* prints from a to z */ } 

、私はNSOperationQueueをインスタンス化し、次のように行った:

let queue = NSOperationQueue() 
queue.addOperationWithBlock(foo) 
queue.addOperationWithBlock(bar) 

私はプログラムを実行し、出力がありません。 なぜですか?

メインスレッドことになっているものを、この例では、グローバルスコープはので、私はこれやった上で、私は、キュー外にいくつかの出力を印刷してみてください:

print("START") 

let queue = NSOperationQueue() 
queue.addOperationWithBlock(foo) 
queue.addOperationWithBlock(bar) 

print("END") 

をそして、この「のように」出力を得ました:

START 
END 
0 
1 

キューの操作が適切に実行されていないようです。メインスレッドはキューが終了するのを待っていませんか?

答えて

0

キューに追加された操作が終了する前にコマンドラインアプリが終了しているため、出力が表示されません。 NSOperationQueueにオペレーションを追加する目的は、他のスレッドでいくつかのタスクを実行することです。主なスレッドをブロックしないで時間を費やすことを目的としていることがよくあります。

理論的には、すべての操作が完了するのを待つことができます(waitUntilAllOperationsAreFinished参照)が、コマンドラインテストでは便利なパターンですが、CocoaやCocoa Touchアプリでは決して使用しません。これらの環境ではメインスレッドをブロックします)。

関連する問題