2010-06-22 4 views
4

Jusqu'à présent, je croyais que -(void)startToDoSomethingWithThis:(That*)thing andThat:(That*)otherThing a la suite « signature de la méthode », qui est en même temps aussi le sélecteur: -startToDoSomethingWithThis:andThat:Quelle est la différence entre la signature de la méthode et le sélecteur dans Objective-C?

Mais maintenant, quelqu'un a dit que le sélecteur est pas comme la signature de la méthode, et que la méthode signature contient également les arguments et leurs types. Est-ce exact?

Répondre

8

Un sélecteur est le nom d'une méthode dans une classe. Il est utilisé pour identifier la méthode, le plus souvent lorsqu'elle est appelée. Une signature est une description des types d'argument et de retour. Il est utilisé lors de l'appel d'une méthode arbitraire, par exemple par NSInvocation, pour organiser les arguments et faire de la place pour la valeur de retour. De nombreux sélecteurs peuvent avoir la même signature.

SEL aSelector = @selector(method:foo:); 
NSMethodSignature *aSignature = [theObject methodSignatureForSelector:aSelector]; 

NSMethodSignature est un wrapper autour des types objc_method_description.

+0

Donc la "signature de méthode" consiste-t-elle dans les arguments et leurs types ainsi que dans le type de retour de la méthode? – dontWatchMyProfile

5

C'est correct. Un sélecteur est le nom de la méthode. Une signature de méthode est une encapsulation du type de retour et des types d'argument. Vous pouvez introspecter les signatures de méthode en utilisant +[NSObject instanceMethodForSelector:], ce qui renvoie un objet NSMethodSignature.

+2

Un 'NSMethodSignature' n'enregistre pas le sélecteur auquel il est associé. – drawnonward

+0

@drawnonward merci de me corriger. réponse éditée. –

Questions connexes