1
[self performSelectorOnMainThread:@selector(customFoo:) withObject:obj waitUntilDone:YES];

[self customFoo:obj];

私が知っているように、2番目のものがメインスレッドで呼び出された場合、それらの2つに違いはありません...そうですか?

それらの2つの基本的な違いは何ですか?

4

2 に答える 2

2

実行時の動作は同じです。ただし、コードをコンパイルする場合は違いがあります。2つ目は、メソッドcustomFoo:が定義されている場合にのみコンパイルされます。

于 2012-04-23T10:30:13.960 に答える
1

PerformSelector:指定されたメッセージを受信者に送信し、メッセージの結果を返します。

PerformSelectorは、実行したいときにメソッドを呼び出すために使用されます。つまり、特定のタスク(メソッド)の例を実行するために別のオプションを選択するオプションがあります。

– performSelector:withObject:afterDelay: // will execute method after specific delay.. 
– performSelector:withObject:afterDelay:inModes: 
– performSelectorOnMainThread:withObject:waitUntilDone: 
– performSelectorOnMainThread:withObject:waitUntilDone:modes:
– performSelector:onThread:withObject:waitUntilDone: 
– performSelector:onThread:withObject:waitUntilDone:modes:

– performSelectorInBackground:withObject://バックグラウンドでタスクを実行します。したがって、ManinThread(Application)は、マルチスレッドのように応答を停止しません。

直接法([self customFoo:obj];)がタスクを実行するための選択を提供しない場合。

詳細な説明については、このリファレンスをご覧ください。

願っています、これはあなたを助けるでしょう...

于 2012-04-23T10:40:36.197 に答える