Quand doit on utiliser un pointeur d'objet ?

zenxzenx Membre
13:26 modifié dans API AppKit #1
Bonjour !

En fait j'aimerais savoir si lorque je déclare une variable de type objet (exemple: NSString *machaine) je dois toujours la déclarer en tant que pointeur de même pour une methode qui renvoit une réponse de type objet (exemple (NSString *)traitementDeChaine). Est il possible de faire plutôt ainsi : NSString machaine, comme on déclarerait une variable i de type entier : int i, de même que pour la déclaration de methode (NSString)traitementDeChaine.  Si oui, quel est l'inconvénient à  choisir une façon de déclarer plutôt qu'une autre et concrétement, quelles en sont les répercutions dans le déroulement du programme ?

Merci.  ;)

Réponses

  • AliGatorAliGator Membre, Modérateur
    novembre 2005 modifié #2
    La réponse est non car l'objective-C est un langage qui alloue tout de façon dynamique.

    Toutes les variables de type NSObject ou classes dériviées (NSString & co) sont allouées dynamiquement. Tout est d'ailleurs prévu pour et l'Objective-C fonctionne ainsi.

    Il est donc hors de question d'utiliser un NSObject ou un NSString à  la place d'un NSObject* ou d'un NSString* !! Le alloc/init ne serait pas appelé, les méthodes n'auraient pas le bon prototype, enfin bref y'aurait de gros risque de plantage, si tant est que ça veuille bien compiler !

    Conclusion : toujours utiliser les formes "pointeurs".

    D'ailleurs, parmi les programmeurs Obj-C/Cocoa, il y en a sans doute un certain paquet qui ne savent pas forcément ce qu'est un pointeur, en fait ils ne se posent pas la question contrairement à  ceux qui viennent du C ou du C++ et qui parfois peuvent se demander si là  il faut un pointeur ou là  il n'en faut pas : c'est totalement transparent en ObjC puisqu'on respecte juste cette règle simple : la syntaxe est "NSString* mavariable" un point c'est tout.

    Enfin je ne sais pas comment ceux qui n'ont jamais fait de C voient ça, mais en tout cas la notion de pointeur est souvent totalement absente de la réflexion puisque l'on n'a pas à  s'en soucier ;)
  • LeChatNoirLeChatNoir Membre, Modérateur
    13:26 modifié #3
    Slt,

    Il me semble qu'en Obj-C, t'as pas bien le choix...

    En fait, quand tu fais un NSString * test=[NSString alloc] pour faire court, NSString t'alloues la zone mémoire qu'il te faut et te renvoie un pointeur sur cette zone.

    Avantage : dans les passages de paramètres, tu récup' juste le pointeur plutot que de recopier systématiquement l'objet qui peut être lourd (plus lourd qu'un simple pointeur en tous cas).

    Je sais pas vraiment si c'est lié à  Obj-C ou aux objets Cocoa. Je pencherai plutot sur Cocoa. Je pense qu'en Obj-C, avec les objets autres que Fundation et AppKit, ça doit être faisable...
  • zenxzenx Membre
    13:26 modifié #4
    Merci beaucoup énormément...C'est mieux que la hotline Developpeur d'Apple ici !! et en plus c'est en français dans le texte !!  :)
Connectez-vous ou Inscrivez-vous pour répondre.