Quand doit on utiliser un pointeur d'objet ?
zenx
Membre
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.
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.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
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
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...