В Objective-C, почему это увеличение на 4 вместо 1? - PullRequest
18 голосов
/ 23 февраля 2010

В Objective-C у меня есть простой блок кода, который увеличивает счетчик при каждом нажатии кнопки. Мои журналы и даже обновления интерфейса показывают приращение 4 вместо одного. Это просто проблема с моим форматированием (я использую% d) или что-то еще мне не хватает? Мое предположение зависит от "% d", но я новичок в Objective-C и не уверен. (Обратите внимание, я также пробовал "counter + = 1;" с тем же результатом.

int counterValue = 0;
NSLog(@"Count at init: %d",counterValue);
...

-(IBAction)pushButton { 
    NSLog(@"Count (Pre-Push) = %d",counterValue);
    counterValue++;
    NSLog(@"Count (Post-Push) = %d",counterValue);
}

Вывод выглядит следующим образом:

2010-02-20 18:39:39.125 My App[37536:207] Count at init:  0
2010-02-20 18:39:39.845 My App[37536:207] Count (Pre-Push) = 0
2010-02-20 18:39:39.846 My App[37536:207] Count (Post-Push) = 4
2010-02-20 18:39:40.165 My App[37536:207] Count (Pre-Push) = 4
2010-02-20 18:39:40.166 My App[37536:207] Count (Post-Push) = 8
2010-02-20 18:39:40.727 My App[37536:207] Count (Pre-Push) = 8
2010-02-20 18:39:40.728 My App[37536:207] Count (Post-Push) = 12

1 Ответ

43 голосов
/ 23 февраля 2010

Код, который вы показываете, не должен этого делать. Я сделал быструю программу для двойной проверки и получаю ожидаемые результаты:

2010-02-22 17:04:35.787 app[68267:a0f] Count (Pre-Push) = 0
2010-02-22 17:04:35.790 app[68267:a0f] Count (Post-Push) = 1
2010-02-22 17:04:35.923 app[68267:a0f] Count (Pre-Push) = 1
2010-02-22 17:04:35.924 app[68267:a0f] Count (Post-Push) = 2

Мое лучшее предположение состоит в том, что вы затеняли counterValue с помощью другой переменной типа int *, которая делает приращение + на sizeof(int) вместо 1.

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