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?
Répondre
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
.
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]
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. –
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
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
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. –
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.
- 1. Quand le "soi" est-il nécessaire?
- 2. Pourquoi le «soi» est-il ce que c'est?
- 3. Est-ce que c'est nécessaire?
- 4. Est-ce que le filetage est nécessaire/utile?
- 5. Est-ce que ./path est nécessaire?
- 6. Changer le pointeur de soi
- 7. Déléguez le concept de soi!
- 8. jquery - Est-ce que $ (document) est déjà nécessaire?
- 9. Est-ce que validates_presence_of est nécessaire si vous utilisez validates_length_of?
- 10. ASP.NET MVC Html Helpers - Est-ce que Response.Write est nécessaire?
- 11. Pourquoi est-ce que pageContext est nécessaire dans JSP?
- 12. ASP.net, le panneau Accordian est-il nécessaire?
- 13. UINavigationController est-il nécessaire?
- 14. KillTimer est-il nécessaire?
- 15. Est-ce que le "id" dans une balise d'entrée est nécessaire?
- 16. Est-ce que l'échec/le succès/l'échec de la portée de D est nécessaire?
- 17. Est-ce que l'enregistrement Android est nécessaire pour le développement de l'application Android?
- 18. Est-ce que quelque chose dans le genre de la mémoisation imbriquée est nécessaire ici?
- 19. Est-ce que le verrouillage est vraiment nécessaire dans mon application iPhone?
- 20. Html.BeginForm() est-il nécessaire?
- 21. Est-il nécessaire que ulimit lance memcached avec -c?
- 22. Zend_Form_Element_Image est nécessaire ici?
- 23. Quoi de plus est nécessaire pour Ajax que cette fonction
- 24. Quand mysql_real_escape_string() est nécessaire?
- 25. Java: Comment désinstaller soi-même et quitter
- 26. Observation de soi dans Cocoa
- 27. Quelle est la différence entre soi et fenêtre?
- 28. BSTR, comment faire soi-même?
- 29. iVars, avec et sans soi?
- 30. Pourquoi EndExecuteNonQuery() est-il nécessaire?
Voulez-vous dire aller de 'self.property = value' à juste 'property = value'? – JBRWilkinson