6
votes

Est-ce que "soi est nécessaire?

utilise "soi" toujours nécessaire dans l'objectif-c ou peut-être juste une bonne pratique? Je suis allé de l'utiliser tout le temps pour ne pas l'utiliser du tout et je ne semble pas vraiment remarquer une différence. N'est-ce pas simplement impliqué quand même?


1 commentaires

Voulez-vous dire partir de 'Self.Property = valeur' ​​to Just 'Property = Value'?


5 Réponses :


3
votes

Ce n'est pas nécessaire pour faire référence à des variables d'instance. Il est nécessaire lorsque vous souhaitez transmettre une référence de l'objet actuel à une autre méthode, comme lors de la définition d'un délégué:

[self doMethod]


1 commentaires

Lors de l'attribution de variable d'instance, il est nécessaire d'utiliser soi-même si vous comptez sur le setter pour copier ou conserver.



0
votes

Oui, car l'objectif c n'a pas d'appels de méthode tels que C / C ++ mais utilise l'envoi de message, soi-même pour des contextes tels que

[auto dosomething]; et self.myproperty;

sont nécessaires.

Si vous accédez à un ivar, vous n'êtes pas nécessaire.

espère que cela aide.

-cv


0 commentaires

1
votes

Pour faire face aux variables, cela dépend. Si vous souhaitez utiliser un getter ou un réglage synthétisé, utilisez la notation de points avec soi-même.

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


1 commentaires

Notez que vous n'avez pas à utiliser la notation du point. Mais beaucoup d'entre nous comme ça. Je vous avertit que: la notation de points a presque l'air d'accéder à un champ d'une structure non pointée, par opposition à l'envoi d'un message à un objet. Parce que les objets Objective-C sont des pointeurs vers des structures, self.someivar = @ "this" ne peut pas accéder à une variable d'instance; Vous utiliseriez auto-> quelqueivar = @ "this" (le bit auto -> est inutile dans la mise en œuvre d'une classe). Ainsi, utilisez la notation de points si vous comprenez ce que vous faites et ce que vous ne faites pas.



5
votes

auto est nécessaire si vous souhaitez qu'un objet envoie des messages à, eh bien, il auto . Il est également occasionnellement bénéfique d'accéder aux propriétés via des getters / setters, auquel cas vous aurez également besoin d'utiliser auto , comme dans auto.propertyname ou auto. Nom de propriété = valeur . (Celles-ci ne sont pas équivalentes au PropertyName ou PropertyName = valeur .


2 commentaires

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


réponse vraiment claire, car dans de nombreux tutoriels sur Web disent que c'est la même chose, merci de répondre



1
votes

Actuellement, il n'est pas nécessaire à chaque fois, mais c'est une bonne pratique, car il est plus facile pour les autres personnes de lire votre code.

Et il est nécessaire lorsque vous avez des objets avec le même nom dans différentes classes, alors le travail de clé "Self" indiquera à votre logiciel que vous référenciez l'objet dans cette même classe.

Cela arrive généralement dans des projets plus importants.


0 commentaires