37 votes

Fonction C vs méthode Objective-C?

Quelle est la différence entre les deux? Si j'écris un programme, quand aurais-je besoin de ceci:

 void aFunction() {
    //do something
}
 

et quand aurais-je besoin de ceci:

 -(void)aMethod {
    //do something else
}
 

79voto

bbum Points 124887

En fait, l'Objective-C méthode est une fonction C avec deux arguments toujours présent au début.

Ce:

-(void)aMethod;

Est exactement équivalent à ceci:

void function(id self, SEL _cmd);

Objective-C de messagerie est telle que cela:

[someObject aMethod];

Est exactement l'équivalent de ce (presque -- il y a un variadic argument ABI question au-delà de la portée de cette réponse):

objc_msgSend(someObject, @selector(aMethod));

objc_msgSend() trouve la bonne mise en œuvre de la méthode (en regardant sur someObject), puis, par la magie d'une queue d'appel d'optimisation, sauts à la mise en œuvre de la méthode qui, à toutes fins et intentions, fonctionne exactement comme un appel de fonction C qui ressemble à ceci:

function(someObject, @selector(aMethod));

Littéralement, Objective-C a été initialement mis en œuvre en tant que rien, mais un préprocesseur C. Tout ce que vous pouvez faire en Objective-C pourrait être réécrit de la manière rectiligne C.

Ce faisant, toutefois, serait une douleur dans le cul et n'en vaut pas votre temps, au-delà de l'incroyable expérience éducative de le faire.


En général, vous devez utiliser Objective-C méthodes lorsque l'on parle à objets et de la fonction lorsque vous travaillez avec des droites C goop. Étant donné que pratiquement tous de Mac OS X et iOS fournir de l'Objective-C Api -- certainement pas du tout pour l'INTERFACE de programmation au niveau des points d'entrée -- puis vous utilisez l'Obj-C la plupart du temps.

Même lors de l'écriture de votre propre modèle de code de niveau, ce qui est relativement autonome, vous serez généralement utiliser Objective-C tout simplement parce qu'il offre un très naturelle de la colle entre les données et fonctionnalités, il est primordial de locataire de la programmation orientée objet.

9voto

aqua Points 2014

En Objective-C chaque fonction opère sur un objet, comme

[myObject myFunction]

Un C méthode est de la forme:

return-type function-name(argument1, argument2, etc) {}

Objective-C exemple de la méthode est de la forme:

-(return-type)function-name:argument1 {}

ou pour un multi-fonction d'argument

-(return-type)function-name:argument1 function-name:argument2 {}

J'ai toujours utiliser Objective-C-style méthodes en Obj-C programmation, même si vous pouvez toujours utiliser C-type de fonctions.

Je suppose que l'équivalent en C [myObject myMethod:arg] pourrait être myObject.myMethod(arg)

2voto

Etienne de Martel Points 16020

La première est une fonction autonome. La seconde est une méthode d'instance pour une classe Objective-C. Donc, je suppose que vous auriez besoin de la deuxième version si vous écrivez réellement un cours.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X