2

で呼び出すとします

[self methodname] 

その他

[self performSelector:@selector(methodname) withObject:nil];
4

2 に答える 2

4

違いはありません。

ドキュメントから直接performSelector:

このメソッドは、メッセージを受信者に直接performSelector:送信するのと同じです。aSelectorたとえば、次の 3 つのメッセージはすべて同じことを行います。

id myClone = [anObject copy];
id myClone = [anObject performSelector:@selector(copy)];
id myClone = [anObject performSelector:sel_getUid("copy")];

ただし、特定のケースに違いはありませんが、存在する理由performSelector:は、ドキュメントで説明されているように、コンパイル時に使用できない可能性がある任意のセレクターを呼び出すことができるためです。

ただし、このperformSelector:メソッドを使用すると、実行時まで決定されないメッセージを送信できます。変数セレクターは引数として渡すことができます:

SEL myMethod = findTheAppropriateSelectorForTheCurrentSituation();
[anObject performSelector:myMethod];

上記の考慮事項は、2 つのバリアントperformSelector:withObject:にも適用されますperformSelector:withObject:withObject:

また、これは別の一連のメソッドには当てはまらないことに注意してください。

  • performSelector:withObject:afterDelay:
  • performSelector:withObject:afterDelay:inModes:
  • performSelectorOnMainThread:withObject:waitUntilDone:
  • performSelectorOnMainThread:withObject:waitUntilDone:modes:
  • performSelector:onThread:withObject:waitUntilDone:
  • performSelector:onThread:withObject:waitUntilDone:modes:
  • performSelectorInBackground:withObject:

詳細はこちら: performSelector はすぐに実行されますか、それとも実行される予定ですか?

于 2013-10-07T05:08:07.627 に答える