Est-il utile de préfixer ses classes ?

Bonjour,


 


Je me pose la question de l'utilité de préfixer les classes.  A la création d'un projet, xcode propose de définir un préfixe pour chaque classe créée.  Du coup on se retrouve avec de truc du style XYZAppDelegate.h, XYZViewController etc...


 


Qu'en pensez-vous ?  Cela a-t-il du sens ?  Quel est l'intérêt de préfixer ?


 


Merci de m'éclairer.


 


siso


 


Réponses

  • CéroceCéroce Membre, Modérateur
    Oui, il faut.
    En ObjC, il n'y a qu'un espace de nommage (namespace), le problème est que tu peux créer une classe qui porte le même nom qu'une autre classe dans une autre framework. Il y aura un conflit, le compilateur ne sachant pas de laquelle on parle. C'est pour ça qu'on préfixe. Note que ça ne résout pas tout, puisqu'il est possible que deux personnes utilisent le même préfixe!
  • muqaddarmuqaddar Administrateur

    Moi, je ne préfixe que les classes qui peuvent être utilisées dans d'autres projets.


  • Il y a quand même un truc qui m'échappe : les applications étant compilées, le nom des classes disparait au profit d'adresses mémoire non ?  


  • CéroceCéroce Membre, Modérateur
    juillet 2014 modifié #5
    En fait, ils apparaissent bien dans l'appli, on peut les voir, par exemple avec l'utilitaire classdump.

    Mais ce n'est pas un problème de conflit des symboles compilés, c'est avant tout que, par exemple, si tu as une classe qui s'appelle Player, tu as pas mal de chance qu'elle existe dans une autre framework.

    Ainsi, il existe AVPlayer et GKPlayer ! Si ton module importe à  la fois AVFoundation et Game Kit, il faut identifier de quelle classe Player on parle.

    Toi aussi, il faut préfixer si tu penses réutiliser ton code.
  • zoczoc Membre
    juillet 2014 modifié #6


    Il y a quand même un truc qui m'échappe : les applications étant compilées, le nom des classes disparait au profit d'adresses mémoire non ?  




     


    Oui, mais :


    • Au moment de l'édition de lien, si personne ne préfixe, il peut y avoir des collisions de nom et dans ce cas le linker sera bien incapable de produire un binaire. Ce n'est pas différent des autres langages dérivés du C (et c'est pourquoi on a inventé les namespaces en C++).
    • Objective-C est un langage très dynamique (par rapport à  C ou C++ notamment). Il est possible de créer des classes et d'y ajouter des propriétés et méthodes à  l'exécution et pas seulement à  la compilation. De même, il est possible de créer une instance à  partir d'une chaine de caractères contenant le nom d'une classe (fonction NSClassFromString). Donc, oui, le nom des classes persiste après la compilation et est utilisé pour le dispatch dynamique des messages.

     


     


    Edit : Bizarrement dans l'éditeur je met en forme mon message en mettant des puces qui ne semblent ensuite pas apparaà®tre correctement... Pb du forum ?


  • Merci pour ces explications.  Je vais donc préfixer mes classes comme conseillé.


  • Voici un lien de doc aussi, tu trouveras surement des conventions sur les prefix/nommage de classes.


     


    https://developer.apple.com/library/mac/DOCUMENTATION/Cocoa/Conceptual/CodingGuidelines/Articles/NamingBasics.html#//apple_ref/doc/uid/20001281-BBCHBFAH


  • C'est indispensable si on fait un framework.

    Prudent si on compte reutiliser du code.

    Un peu parano sinon.
Connectez-vous ou Inscrivez-vous pour répondre.