Quelle est la différence entre une méthode, un sélecteur et un message en Objective-C ?
Réponses
Trop de publicités?C'est une grande question.
Sélecteur - Selector est le nom d'une méthode. Vous êtes très familier avec ces sélecteurs:
alloc
,init
,release
,dictionaryWithObjectsAndKeys:
,setObject:forKey:
, etc. Notez que le côlon est la partie de la sélection; c'est la façon dont nous identifions que cette méthode nécessite des paramètres. Aussi (même si c'est extrêmement rare), vous pouvez avoir sélecteurs comme ceci:doFoo:::
. C'est une méthode qui prend trois paramètres, et vous souhaitez appeler comme[someObject doFoo:arg1 :arg2 :arg3]
. Il n'y a aucune exigence de lettres avant chaque partie de la sélection des composants. Comme je l'ai dit, ce qui est extrêmement rare, et vous ne trouverez pas qu'il est utilisé dans le Cacao cadres. Vous pouvez travailler avec les sélecteurs directement dans le Cacao. Ils ont le typeSEL
:SEL aSelector = @selector(doSomething:)
ouSEL aSelector = NSSelectorFromString(@"doSomething:");
Message - un message est un sélecteur et les arguments que vous envoyez. Si je dis
[dictionary setObject:obj forKey:key]
, alors que le "message" est le sélecteursetObject:forKey:
plus les argumentsobj
etkey
. Les Messages peuvent être encapsulés dans unNSInvocation
d'objets pour plus tard invocation. Les Messages sont envoyés à un récepteur. (c'est à dire, l'objet qui "reçoit" le message).Méthode - une méthode est une combinaison d'un sélecteur et une mise en œuvre (et métadonnées). La "mise en œuvre" est bien le bloc de code, c'est un pointeur de fonction (
IMP
). Une méthode peut être récupéré à l'interne à l'aide d'unMethod
struct (accessibles à partir de l'exécution).
Quelques autres choses que vous n'avez pas de demander:
Signature de la méthode - une signature de méthode représente les types de données renvoyées par et accepté par une méthode. Ils peuvent être représentés à l'exécution par le biais d'un
NSMethodSignature
et (dans certains cas) brutchar*
.Mise en œuvre - le code de l'exécutable d'une méthode. Son type à l'exécution est un
IMP
, et c'est vraiment juste un pointeur de fonction. iOS 4.3 comprend une nouvelle capacité à transformer un bloc enIMP
. C'est vraiment cool.
Une des choses amusantes à réaliser est que le nom d'une méthode (le sélecteur) est distincte de la mise en œuvre de la méthode (IMP). Cela signifie que vous pouvez échanger autour, si vous vous sentez audacieux. Vous pouvez également ajouter et supprimer des méthodes au moment de l'exécution, parce que tout ce que vous faites est en train de modifier une entrée dans une table de hachage: la clé est le sélecteur, et la valeur de l' IMP
de la méthode. Cela vous permet de faire vraiment fou et trippy choses. Ce n'est pas pour les faibles de cœur. :)
Une méthode est l'application qui est exécutée lorsqu'un objet ou une classe est demandé d'effectuer une certaine action. C'est dans le cadre de son contenant de la classe et est donc différente lorsqu'ils sont référencés à l'aide d'une autre classe. Un sélecteur est un identifiant qui représente le nom d'une méthode. Il n'est pas lié à une catégorie spécifique ou la méthode, et peut être utilisé pour décrire une méthode de classe, qu'elle est une classe ou d'une méthode d'instance.
Tout simplement, un sélecteur est comme une clé dans un dictionnaire. Il peut vous dire ce que la méthode de quelqu'un est en train de parler, mais seulement si vous aussi vous avez le dictionnaire lui-même (l'objet ou de classe). La méthode est ce que vous obtenez lorsque vous demandez la valeur du dictionnaire à l'aide du sélecteur comme une clé.
Ce site a un bon aperçu de la terminologie en question: http://www.otierney.net/objective-c.html
Découvrez le lien, mais je vais faire un rapide résumé:
Une méthode est essentiellement comme une méthode de la fonction que vous utilisez dans votre langage de programmation favori.
Un message (de l'article) "Un message peut être transmis de façon dynamique à un autre objet. Appelant un message sur un objet en Objective-C ne signifie pas que l'objet implémente ce message, juste qu'il sait comment y répondre en quelque sorte directement via la mise en œuvre ou de transférer le message à un objet qui ne sait comment faire."
Les sélecteurs peuvent signifier deux choses. Il peut désigner le nom d'une méthode, ou "fait référence à l'identifiant unique qui remplace le nom lorsque le code source est compilé. Compilé les sélecteurs sont de type SEL." (à partir de: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocSelectors.html)