2010-09-28 24 views
8

¿alguien puede decir la diferencia entre el objetivo C y C++ este puntero?Diferencia b/n Objetivo C y C++ es esto?

+0

¿Qué le dicen sus referencias de Objective-C y C++? – GManNickG

+0

posible duplicado de [Asignar a sí mismo en Objective-C] (http://stackoverflow.com/questions/1341734/assigning-to-self-in-objective-c) –

+3

Kirill V. Lyadvinsky: No es un duplicado de eso pregunta. El interlocutor allí ya entendió la respuesta a esta pregunta. – JeremyP

Respuesta

21

La diferencia principal es que this es una palabra clave, mientras que self es una variable. El resultado de esto es que mientras thissiempre se refiere al objeto que está ejecutando un método en particular, los métodos de Objective-C son libres de modificar self durante la ejecución. Esto a veces lo utilizan los constructores, que establecen self = nil en caso de error.

Las razones para hacerlo son:

  • de manera que las subclases (que inicializadores con self = [super init] cadena) se puede ver cuando la inicialización falla y saben que no deben continuar en sus propios inicializadores.
  • Los objetos de composición pueden ver el error y saber que no tienen un componente válido.

Algunos inicializadores establecerán self en un objeto diferente, pero válido. Esto se puede usar en clústeres de clase, donde la clase "abstracta" puede generar una instancia temporal mientras se construye el objeto inicializado, pero finalmente devuelve un objeto diferente en función de las propiedades que se crearon durante la construcción.

Además, significa que puede hacer las cosas habituales con nombres de variables que confunden a todos los que no puede hacer con palabras clave, como definir una variable más local con el mismo nombre self en un bloque de código.

+0

En C++, * puede * modificar el valor de esto. No digo que debas, pero he visto que solía incluir información adicional en un sistema en el que el puntero de 32 bits no se usaba completamente en las asignaciones de memoria ... – jv42

+0

@ jv42: mi compilador no permite eso sin establecer un opción, así que asumí que era no estándar o anacrónico. –

+1

@ jv42: 'this' es un valor r, no se puede modificar. – GManNickG

5

Sí. Uno se escribe s-e-l-f. El otro se escribe t-h-i-s.

menos en broma:

self se utiliza en las clases de Objective-C para representar un puntero de la instancia actual.

this se utiliza en las clases de C++ para representar un puntero a la instancia actual.

Realizan funciones análogas pero en estructuras completamente diferentes.

+0

@Preet Sangha: ¿Y qué tiene de malo tener una broma en la respuesta? – JeremyP

+0

Lol. Escribí una broma porque era demasiado vago como para buscar la forma de deletrear graciosamente una vez que la había eliminado. Y para responder a su pregunta nada en absoluto. –