Escritura dinámica y valores de retorno en Objective-C

Me he encontrado con un comportamiento muy extraño que no puedo entender. tengo unTexture clase concontentWidth propiedad de tipoint. Esta clase está envuelta en unImage clase que tiene unawidth propiedad de tipoint. loswidth de unaImage se calcula simplemente como elcontentWidth de la textura subyacente:

- (int) width
{
    return texture.contentWidth;
}

Ahora elImage es utilizado por unButton Clase (por composición, no por herencia) que quiere leer el tamaño de la imagen:

// image is of type ‘id’
int width = [image width];
int height = [image height];

El problema es que laheight variable se establece bien, mientras que la variablewidth variable contieneNaN (–2147483648). He comprobado las dimensiones: son aproximadamente 200 × 100 o menos, en ninguna parte cerca delint límite. También la información sobre herramientas del depurador de Xcode muestra ambas propiedades en elTexture correctamente, solo después de que el ancho atraviesa los dos accesores, el número se confunde. Los objetos no son liberados. ¿Qué me estoy perdiendo?

Actualizar: He ampliado el accessor en elImage clase para ver donde se origina el problema:

- (int) width
{
    const int w = texture.contentWidth;
    return w;
}

Ahora cuando rompo en la primera línea, elw se establece correctamente. Paso por encima, la ejecución vuelve a la función de llamada:

- (void) foo
{
    int bar = [image width];
}

... y ahora elbar contieneNaN.

Actualizar: Mhm, lo tengo

int foo = [image width]; // image is id, returns NaN
int bar = [(Image*) image width]; // correct value

losimage se declara comoid, que es el punto aquí. ¿Alguien podría explicar esto? Tengo la sensación de que no estoy llamando a la derechawidth Método, pero ¿qué está pasando exactamente aquí? Siempre escribo mis variables lo más estrictamente posible, pero aquíid el tipo es útil No tenía idea de que podría dar lugar a tal error.