Цель-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.