0

簡単に言うと、スレッド (または NSThread) と NSOperation の間に 1 対 1 の接続がありますか? それとも、操作がバックグラウンドで複数のスレッドによって取得および実行できる一種のタスクであると抽象化されていますか?

4

1 に答える 1

4

1 対 1 の接続ではありません。サブクラスを使用する利点はNSOperation、マルチスレッドを自分で管理する必要がないことです。Apple は (紛らわしいことに) 典型的なNSOperationサブクラス (つまり、メソッドをオーバーライドする-mainもの) をnon-concurrentと定義していますが、それは並行性をサポートしていないからではなく、並行性の詳細がスーパークラスによって管理されているためです。

用語に惑わされないでください。操作が非並行であるからといって、同時に実行できないわけではありません。並行性を自分で処理する必要がないことを意味します。

その意味で、NSOperationサブクラスは NSThread のターゲット オブジェクトに非常に似ています detachNewThreadSelector:toTarget:withObject:

同時実行の動作を制御したい場合の別の方法は、-startを呼び出す前に、必要に応じて同時実行をオーバーライドして設定すること-mainです。

ここに非常に良い概要があります: NSOperation による並行性の管理

于 2011-05-12T14:45:43.380 に答える