¿Cuál es el significado de id?

Estoy (tratando de) aprender Objective-C y sigo encontrando una frase como:

-(id) init; 

Y entiendo que id es una palabra clave de lenguaje Objective C, pero ¿qué significa decir “el comstackdor trata específicamente a id en términos de las reglas de conversión de tipo de puntero”?

¿ id automáticamente el objeto a su derecha como un puntero?

id es un puntero a cualquier tipo, pero a diferencia de void * siempre apunta a un objeto Objective-C. Por ejemplo, puede agregar cualquier elemento de tipo id a un NSArray, pero esos objetos deben responder para retain y release .

El comstackdor está totalmente feliz de poder convertir implícitamente cualquier objeto a la id , y para que pueda convertir el id a cualquier objeto. Esto es diferente a cualquier otro lanzamiento implícito en Objective-C, y es la base para la mayoría de los tipos de contenedores en Cocoa.

id es un puntero a cualquier objeto Objective-C ( objc_object ). No es solo un puntero nulo y no deberías tratarlo como tal. Hace referencia a un objeto que debe tener un puntero isa válido. Los valores que se pueden almacenar en id no solo se limitan a NSObject y sus descendientes, lo que comienza a dar sentido a la existencia del protocolo NSObject , así como a la clase NSProxy que ni siquiera hereda de NSObject . El comstackdor le permitirá asignar un objeto referenciado por tipo id a cualquier tipo de objeto, asignar cualquier tipo de objeto a la id , así como enviar cualquier mensaje (que el comstackdor haya visto) sin previo aviso.

id es un tipo genérico. Esto significa que el comstackdor esperará cualquier tipo de objeto allí y no impondrá restricciones. Puede ser útil si esperas usar más de una clase de objetos allí; luego puede usar la introspección para descubrir de qué clase se trata. id asume automáticamente un puntero, ya que todos los objetos en Objective-C se pasan como punteros / referencias.

Algunos recursos adicionales:
id vs NSObject vs id *
Progtwigción Objective-C (Wikilibros)
Introspección
Mecanografía dinámica

  • id es un tipo de datos de identificadores de objeto en Objective-C, que se puede usar para un objeto de cualquier tipo, sin importar qué clase tenga. id es el súper tipo final de todos los objetos.

En java o c # usamos así

  Object data = someValue; String name =(Object)data; 

pero en el objective c

 id data= someValue; NSString *name= data; 

Si y no. Es cierto que tener id x designa x como un puntero, pero decir que las reglas de conversión de tipo de puntero se aplican es incorrecto, porque “id” tiene reglas de conversión de tipo especial. Por ejemplo, con un puntero void * no puedes hacer esto:

 void *x; char *y = x; // error, this needs an explicit cast 

Por el contrario, es posible con id:

 id x; NSString *y = x; 

Ver más uso de tipo ID en ejemplos de Object c .

Además, en el Objetivo C “moderno”, se prefiere usar el tipo de instancetype lugar de “id” en los métodos “init”. Incluso hay una herramienta de conversión automática en Xcode para cambiar eso. Lea sobre el tipo de instancia: ¿Sería beneficioso comenzar a usar el tipo de instancia en lugar del ID?