2010-10-22 8 views
1

Je joue avec l'objectif C un peu et je trouve qu'il est une grande langue ..Objectif C/Object Oriented Pointeurs

venant de C# j'ai trouvé des pointeurs un peu dur, mais maintenant je comprends le concept et comment utiliser les ..

-à-dire:

MyObject* x = [[myObject alloc] callinitializer]; 

qui crée un nouvel objet sur le tas et un pointeur sur la pile ..

mais quelqu'un peut s'il vous plaît expliquer pourquoi une ccès les propriétés des objets que vous faites ceci:

[x setsomeprop: @"I Like Pizza"]; 

au lieu de ceci:

[*x setsomeprop: @"With Pineapple"]; 

sans l'étoile déréférencement ne coûtent que nous venons de travailler avec le pointeur au lieu de l'objet lui-même ??

Confucide!

Merci

Daniel

Répondre

6

No. La syntaxe de support est une fonctionnalité de langage spécifiquement pour les objets - il déréférence automatiquement le pointeur.

+0

Merci beaucoup c'est génial! .. Je me suis arraché les cheveux en pensant que j'étais stupide parce que pas un des livres obj-c que j'ai lu a dit que je viens de hausser les épaules et supposé que cela se produisait, Oh btw fait je reçois la pile/tas terminologie droite? –

+0

Oui, vous l'avez. –

0

En partie, ceci est juste un résultat de la façon dont la répartition des méthodes fonctionne dans un langage dynamique comme Objective-C. Il n'y a presque rien d'utile que vous puissiez faire avec un pointeur d'objet déréférencé en Objective-C. Etant donné que tous les objets sont stockés sur le tas et gèrent leur propre cycle de vie avec conservation/libération (ou via garbage collection), un pointeur sur l'objet est exactement ce que vous voulez utiliser dans 99% de toutes les situations. Comme il s'avère, essentiellement le même mécanisme est utilisé en C# et Java - les références d'objets sont des pointeurs, c'est pourquoi l'affectation d'une référence à une autre les fait pointer sur le même objet, plutôt que de copier l'objet.

Questions connexes