2010-05-07 12 views
6

¿Es necesario utilizar "yo" en Objective-C o tal vez solo una buena práctica? He pasado de usarlo todo el tiempo para no usarlo en absoluto y no parece notar ninguna diferencia. ¿No está solo implicado de todos modos?¿Es necesario "ser uno mismo"?

+0

¿Quiere decir ¿va de 'self.property = value' a solo 'property = value'? – JBRWilkinson

Respuesta

5

self es necesario si se desea para un objeto de enviar mensajes a, bueno, es self. También es útil en ocasiones acceder a propiedades a través de getters/setters, en cuyo caso también deberá utilizar self, como en self.propertyname o self.propertyname = value. (Estos no son equivalentes a propertyname o propertyname = value.

+0

¿Qué sucede si uso notación de mensaje en lugar de notación de punto? ¿Importa? – Rob

+0

No. Todavía necesita uno mismo. –

+0

respuesta realmente CLARA, porque en muchos tutoriales en la web todos dicen que son las mismas cosas, gracias por responder – gbk

3

No es necesario cuando se hace referencia a variables de instancia. Es necesario cuando se quiere pasar una referencia del objeto actual a otro método, como la hora de establecer un delegado:

[someObj setDelegate:self]; 

También es necesario cuando se llama a un método en la misma clase de objeto actual:

[self doMethod] 
+2

Al asignar a variable de instancia, es necesario usar self si confía en que el setter copie o retenga. –

0

Sí, porque Objetivo C no tiene método llama como C/C++, pero utiliza el envío de mensajes, sin asistencia, en contextos como

[auto doSomething]; y self.myProperty;

son necesarios.

Si está accediendo a un ivar, no es necesario.

Espero que ayude.

-CV

1

Para manejar las variables, depende. Si desea usar un getter o setter sintetizado, use la notación de puntos con self.

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

Tenga en cuenta que no tiene que usar la notación de puntos. Pero a muchos nos gusta. Sin embargo, te lo advierto: la notación de puntos casi parece que estás accediendo a un campo desde una estructura no apuntadora, en lugar de enviar un mensaje a un objeto. Debido a que los objetos de Objective-C son punteros a las estructuras, 'self.someiVar = @" this "' no puede acceder a una variable de instancia; usted usaría 'self-> someiVar = @" this "' (el bit 'self->' no es necesario en la implementación de una clase). Entonces, use la notación de puntos si comprende lo que está haciendo y lo que no está haciendo. –

1

podía comprender que no es necesario cada vez, pero es una buena práctica, ya que hace que sea más fácil para otras personas a leer su código.

y es necesario cuando se tiene objetos con el mismo nombre en diferentes clases, entonces el keywork "sí" le dirá a su software que se hace referencia al objeto de la misma clase.

que por lo general happends en proyectos más grandes.

Cuestiones relacionadas