Цель-C: Как вы объявляете и сохраняете int? - PullRequest
0 голосов
/ 21 декабря 2009

Вот мой код:

@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.

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

EDIT: хммм, почему я получил -1?

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

До этого я хотел бы сказать, что я сделал 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.

EDIT: -Я собираюсь задать новый вопрос сейчас, чтобы выяснить, почему ценность меняется сама по себе. Спасибо за вашу помощь, ребята, отличная работа.

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

Ответы [ 2 ]

6 голосов
/ 21 декабря 2009

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

0 голосов
/ 21 декабря 2009

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...