1

backgorund の perform selector と detachNewThread の違いを知りたい

4

2 に答える 2

2

それらは同一です。ドキュメントセクションでわかるように、ここをクリック

performSelectorInBackground: withObject:このメソッドを呼び出す効果は、現在のオブジェクト、セレクター、パラメーター オブジェクトをパラメーターとしてNSThread のdetachNewThreadSelector:toTarget:withObject:メソッドを呼び出した場合と同じです。

performSelectorInBackground:withObject:は、NSThread よりも簡単な方法です。

ただし、NSThread はその優先度、スタックサイズなどを制御できます。動作をカスタマイズする場合は、performSelectorInBackground:withObject: の代わりに NSThread をお勧めします。

于 2012-08-18T10:00:00.703 に答える
0

私はそれをセマンティックな観点から見ていきます。どちらか一方を使用する技術的な理由はありません。

「何かをする」スレッドを持つことを実際に「考える」場合は、NSThreadを使用してください。特に、スレッドが何らかの形式のイベントまたはメッセージ ループを実行する場合、スレッドを作成するのにおそらく最も適切な方法です。そのような場合、「スレッド オブジェクト」はまさにそれです。多くの場合、実際のアプリケーション データを含む「アプリケーション領域」オブジェクトではありません。これらは何らかの方法でスレッドに渡されるためです。

スレッドがバックグラウンドで単一の操作を実行するだけの場合は、NSObject ベースのメソッドを使用します。これが「スレッド」であることはあまり気にしません。これを実行するオブジェクトは、データを含む「アプリケーション領域」オブジェクトである可能性があります。他のスレッドからコマンドを供給するためのイベントまたはメッセージループはありません。

したがって、「特定のコンテキストで何がよりよく見えるか」のように、抽象的な要因に基づいて決定を下します。NSThread を持つことは、複数のクライアントにサービスを提供することをいとわない、より独立したエンティティのように「感じます」が、NSObject メソッドは、それが実行されるデータ オブジェクトに密接に関連付けられているように感じられます。原因に不可欠です。

于 2012-08-18T09:49:26.773 に答える