Objective-C.Увеличение с запоминанием предыдущего результата - PullRequest
0 голосов
/ 06 ноября 2011

В Objective-C у меня есть простая программа, которая увеличивает счетчик при каждом нажатии кнопки.Но мне нужно увеличить предыдущий результат.1, 2, 3 и т. Д. Теперь оно всегда увеличивается от 0 до 1. Как определить, какой программой был предыдущий номер?Что я должен поставить вместо 0?

Код:

- (IBAction) plus;{

    int counterPlus = 0;
    counterPlus++;
    counterField.text = [NSString stringWithFormat:@"%d", counterPlus]; 
}

Ответы [ 3 ]

4 голосов
/ 06 ноября 2011

сделать int counterPlus; переменной экземпляра.

// MONObject.h
@interface MONObject : NSObject
{
@private
  int counterPlus;
}

- (IBAction)plus;

@end

// MONObject.m
@implementation MONObject

- (id)init
{
  self = [super init];
  if (0 != self) {
    counterPlus = 0;
  }
  return self;
}

- (IBAction)plus {
    counterPlus++;
    counterField.text = [NSString stringWithFormat:@"%d", counterPlus]; 
}

@end

Обновить

Чтобы уточнить ответ Матса на ваш вопрос:

причина, по которой вам следует избегать варианта static, заключается в том, что это общая глобальная переменная.

Это означает, что одна статическая / глобальная переменная будет начинаться с нуля и увеличиваться при каждом вызове plus в любом экземпляре.Когда вы создаете новую кнопку, ее номер в поле счетчика будет равен общему числу вызовов plus с момента запуска вашей программы (при условии отсутствия проблем с потоками).С помощью переменной экземпляра количество будет равно количеству нажатий plus для этого экземпляра этой кнопки.

Глобальные переменные, как вы можете видеть из комментариев, также имеют значение «ЗЛО».Они являются большим источником проблем, и их лучше избегать.

1 голос
/ 06 ноября 2011

Объявить counterPlus static. Объявив об этом, при последующих вызовах метода запомнит его предыдущее значение counterPlus или скажет, что инициализация происходит только один раз.

static int counterPlus = 0;

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

0 голосов
/ 06 ноября 2011

Вы хотите сделать это int статическим, чтобы оно сохраняло значение от вызова к вызову.

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