Цель-C: Как вы объявляете и сохраняете int?

Вот мой код:

@interface Game : Layer // this is from cocos2d
{
   int maxSprites;
}

@implementation Game
-(void)initVariables
{
  maxSprites = 18;
}

Позже, когда я распечатал это,

 NSLog(@" maxSprites = %d  ", maxSprites);

Я получил:

 maxSprites = 2

И операции, которые требуют, чтобы это было 18, зависали или не работали, как будто это действительно только 2 сейчас.

Как это было бы возможно? знак равно

APPLE + SHIFT + F не показывает никакого другого использования maxSprites переменная.

Я посмотрел на другие примеры кода, и часто они выставляют переменную с помощью метода get и set, и они также используют @property, Я что-то пропустил? Я новичок в Objective-C, так что я мог бы просто быть!

РЕДАКТИРОВАТЬ: Хммм, почему я получил -1?

Спасибо, я постараюсь научиться делать Watchpoint.

До этого я хотел бы сказать, что я сделал APPLE + SHIFT + F для maxSprites"В проекте, Текст, Содержит, Пропустить регистр и привел только к:

Game.h:     int maxSprites;
Game.m:     maxSprites = 18;
Game.m:     NSLog(@" maxSprites  = %d", maxSprites);
Game.m:     NSLog(@" maxSprites  = %d", maxSprites);
Game.m:     NSLog(@"maxSprites is at %p", &maxSprites);
Game.m:     NSLog(@"maxSprites is at %p", &maxSprites);
Game.m:     NSLog(@" maxSprites  = %d", maxSprites);
Game.m:     NSLog(@" maxSprites  = %d", maxSprites);
Game.m:     NSLog(@"maxSprites is at %p", &maxSprites);
Game.m:     NSLog(@"maxSprites is at %p", &maxSprites);

2-е РЕДАКТИРОВАНИЕ:

Я нашел место, где он меняется, используя точку наблюдения. Здесь меняется:

Expression: “*(int *) 67379960”
New Value: 2
Old  Value: 18

На этой линии:

[self checkMatchBarAward:spriteTypeToAdd];

Странный? Эта функция ничего не делает с maxSprites,

РЕДАКТИРОВАТЬ: -Я собираюсь задать новый вопрос сейчас, чтобы выяснить, почему ценность меняется сама по себе. Спасибо за вашу помощь, ребята, отличная работа.

Новый пост будет рассмотрен здесь: Objective-C: значение int меняется без причины

2 ответа

Решение

Вы не сохраняете int, потому что это не объект. Используйте точку наблюдения и узнайте, когда меняется ваша переменная.

Вы уверены, что initVariables вызывается вообще? Значение всегда 2? Вы ссылаетесь на ту же переменную, называемую maxSprites? Пытаться:

NSLog(@"maxSprites is at %p", &maxSprites);

Трудно поверить, что содержимое переменной просто меняется.

Редактировать: Сначала я подумал, что это может быть "мусор" из стека, но потом я понял, что, конечно, объекты Objective C хранятся не в стеке, а в куче. А реализация malloc в MacOS X "пропускает" выделенную память с 0.

Другие вопросы по тегам