Dynamiczne wpisywanie i zwracanie wartości w Objective-C

Wpadłem na bardzo dziwne zachowanie, którego nie mogę zrozumieć. mamTexture klasa zcontentWidth właściwość typuint. Ta klasa jest zapakowana wImage klasa, która mawidth właściwość typuint. Thewidth zImage jest obliczany po prostu jakocontentWidth podstawowej tekstury:

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

TerazImage jest używany przez aButton klasa (według składu, a nie dziedziczenia), która chce odczytać rozmiar obrazu:

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

Problem polega na tym, żeheight zmienna jest ustawiana w porządku, podczas gdywidth zmienna zawieraNaN (–2147483648). Sprawdziłem wymiary - są około 200 × 100 lub więcej, nigdzie w pobliżuint limit. Także opis debugera Xcode pokazuje obie właściwości wTexture poprawnie, tylko po tym, jak szerokość przejdzie przez dwa akcesory, liczba zostanie zniekształcona. Obiekty nie są uwalniane. czego mi brakuje?

Aktualizacja: Rozszerzyłem akcesorium wImage klasa, aby zobaczyć, skąd pochodzi problem:

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

Teraz, gdy włamuję się do pierwszej linii,w zostaje poprawnie ustawiony. Cofam się, wykonanie powraca do funkcji wywołującej:

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

… A terazbar zawieraNaN.

Aktualizacja: Mhm, rozumiem:

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

Theimage jest zadeklarowany jakoid, o co tu chodzi. Czy ktoś mógłby to wyjaśnić? Mam przeczucie, że nie nazywam tego prawymwidth metoda, ale co tu właściwie się dzieje? Zawsze wpisuję moje zmienne tak ściśle, jak to możliwe, ale tutajid typ jest przydatny. Nie miałem pojęcia, że ​​może to spowodować taki błąd.