Динамическая типизация и возвращаемые значения в Objective-C

Я столкнулся с очень странным поведением, которое я не могу понять. у меня естьTexture класс сcontentWidth свойство типаint, Этот класс обернут вImage класс, который имеетwidth свойство типаint,width изImage вычисляется просто какcontentWidth базовой текстуры:

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

ТеперьImage используетсяButton класс (по составу, а не по наследству), который хочет прочитать размер изображения:

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

Проблема в том, чтоheight переменная устанавливается очень хорошо, тогда какwidth переменная содержитNaN (& # X2013; 2147483648). Я проверил размеры & # x2013; они около 200 × 100 или около того, нигде рядомint предел. Также подсказка отладчика Xcode показывает оба свойства вTexture правильно, только после того, как ширина пройдет через два метода доступа, число искажается. Объекты не освобождаются. Что мне не хватает?

Update: Я расширил аксессор вImage Класс, чтобы увидеть, где возникла проблема:

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

Теперь, когда я ломаюсь на первой строке,w устанавливается правильно. Я перехожу, выполнение возвращается к вызывающей функции:

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

& # x2026; а теперьbar содержитNaN.

Update: Ммм, понял:

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

image объявлен какid, который здесь и есть. Может кто-нибудь объяснить это? У меня есть чувство, что я не правильноwidth метод, но что именно здесь происходит? Я всегда печатаю свои переменные настолько строго, насколько это возможно, но здесьid Тип удобен. Я понятия не имел, что это может привести к такой ошибке.

Ответы на вопрос(2)

Ваш ответ на вопрос