2010-05-07 5 views
6

L'utilisation du «soi» est-elle toujours nécessaire en Objective-C ou peut-être juste une bonne pratique? Je suis passé de l'utiliser tout le temps à ne pas l'utiliser du tout et je ne vois pas vraiment de différence. N'est-ce pas simplement implicite de toute façon? Ce n'est pas nécessaire lorsqu'on se réfère à des variables d'instance.Est-ce que le "soi" est nécessaire?

+0

Voulez-vous dire aller de 'self.property = value' à juste 'property = value'? – JBRWilkinson

Répondre

5

self est nécessaire si vous le souhaitez pour un objet pour envoyer des messages, eh bien, il self. Il est aussi parfois avantageux d'accéder aux propriétés via des getters/setters, auquel cas vous devrez également utiliser self, comme dans self.propertyname ou self.propertyname = value. (Ce ne sont pas équivalents à propertyname ou propertyname = value.

+0

Et si j'utilise la notation de message plutôt que la notation par points? Est-ce que ça importe? – Rob

+0

Non. Encore besoin de soi. –

+0

réponse vraiment claire, parce que dans de nombreux tutoriels sur le web disent tous que c'est la même chose, merci pour la réponse – gbk

3

Il est nécessaire lorsque vous voulez passer une référence de l'objet en cours à une autre méthode, comme lors de la création d'un délégué:

[someObj setDelegate:self]; 

Il est également nécessaire lors de l'appel d'une méthode dans la même classe sur l'objet courant:

[self doMethod] 
+2

Lors de l'affectation à une variable d'instance, il est nécessaire d'utiliser self si vous comptez sur le setter pour copier ou conserver. –

0

Oui, parce que Objective C ne possède pas la méthode appelle comme C/C++, mais utilise l'envoi d'un message, l'auto dans des contextes comme

[auto doSomething]; et self.myProperty;

sont nécessaires.

Si vous accédez à un ivar, le self n'est pas nécessaire.

Espérons que ça aide.

-CV

1

Pour raisonner sur des variables dont il dépend. Si vous voulez utiliser un getter ou un setter synthétisé, utilisez la notation par points avec self.

self.someProperty = @"blah"; //Uses the setter 
someProperty = @"blah"; //Directly sets the variable 
+0

Notez que vous n'avez pas besoin d'utiliser la notation par points. Mais beaucoup d'entre nous aiment ça. Je vous préviens cependant: la notation par points semble presque accéder à un champ à partir d'une structure sans pointeur, par opposition à l'envoi d'un message à un objet. Puisque les objets Objective-C sont des pointeurs vers les structures, 'self.someiVar = @" this "' ne peut pas accéder à une variable d'instance; vous utiliseriez 'self-> someiVar = @" this "' (le bit 'self->' est inutile dans l'implémentation d'une classe). Donc, utilisez la notation par points si vous comprenez ce que vous faites, et ce que vous ne faites pas. –

1

actualy il ne faut pas à chaque fois, mais il est une bonne pratique, car il est plus facile pour d'autres personnes de votre code.

Et il faut lorsque vous avez des objets avec le même nom dans différentes classes, le keywork « auto » racontera votre logiciel que vous faites référence à l'objet dans cette même classe.

ce happends habituellement dans de plus grands projets.

Questions connexes