He leído debajo de la pregunta, y la historia PARECE simple:¿Qué es "super" en Objective-C? (¡sí! = super)?
What exactly is super in Objective-C?
embargo ...
- (id) init
{
NSLog(@"self=%p, super=%p", self, super);
}
que imprime "auto = 0xa83dc50, super = 0xbfffe8d0" . Las direcciones NO SON LAS MISMAS ???!?!?
Esa segunda dirección parece ser un "valor especial" o algo así. Qué significa eso?
Gracias a bbum por señalar que este valor es la dirección de pila de una estructura especial utilizada por el compilador para implementar el comportamiento "super".
puedo llamar [súper init] y la llamada parece funcionar, o al menos, nada explota ... no inmediatamente. Llamar a [((id) 0xbfffe8d0) init] falla mucho con EXC_BAD_ACCESS.
Luego está la parte REALMENTE EXTRAÑA ..... Tengo un fragmento de código que, por ningún motivo explicable, arroja una excepción "NSGenericException: la colección fue mutada mientras estaba enumerada". Dentro de un objeto DIFERENTE (básicamente un contenedor que tiene un puntero al NSEnumerator), al comentar la llamada a "[super init]" no se produce la excepción. Si pudiera, pondría una recompensa de $$$ por una respuesta a ESO.
"id sups = (id) 0xbfffe8d0" ... que también conduce a "la colección está modificada". ... ¿WTF? Ok, así que les dejo una segunda pregunta para que bizzariotity ...
originalmente Vine aquí con una de esas "extrañas" symtoms insectos, que resultaron ser del todo ajeno (típico de este tipo de cosas) : Does casting an address to (id) have side-effects??? Is Address 0xbfffe8d0 special? (fixed: issue was with _NSCallStackArray)
Sin embargo, el contenido sobre la línea sigue siendo válido y la respuesta sigue siendo excelente. Léelo si quieres entender ObjC un poco más profundo.
Aparte de sus otros problemas, 0xbfffe8d0 es presuntamente una dirección de código, pero no hay ninguna razón para esperar que sea la misma de una compilación a la siguiente. Lanzar ese valor literal a un puntero es básicamente crear un puntero a partir de un número aleatorio. –
En realidad, es una dirección de pila, que no es lo mismo que una dirección de código. ¡No es lo mismo de una carrera a la siguiente! –
Una dirección de pila no es la misma de un instante al siguiente en la misma ejecución. –