Objective-C. Увеличить с запоминанием предыдущего результата

#iphone #objective-c #xcode #xcode4

#iPhone #цель-c #xcode #xcode4 #objective-c

Вопрос:

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

Код:

 - (IBAction) plus;{

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

Комментарии:

1. сделайте counterPlus переменной экземпляра и инициализируйте его равным 0 в init. затем удалите «int counterPlus = 0» из вашего кода выше.

Ответ №1:

создайте 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
  

Обновить

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

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

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

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

Комментарии:

1. Отлично! Это тоже работает! В чем разница между использованием static int, как было описано ниже?

2. При использовании static у вас может быть только один счетчик. Это всего лишь одна переменная в памяти. При использовании этого решения вы всегда можете создать больше счетчиков, потому что вы можете создать больше объектов. Решение, ориентированное на объект bettor и дизайн.

3. @Vladmir обновил / расширил ответ Mats с примерами и немного более подробной информацией.

Ответ №2:

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

 static int counterPlus = 0;
  

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

Комментарии:

1. ПОЖАЛУЙСТА, обратите внимание, что эта переменная будет совместно использоваться всеми экземплярами класса, в котором она используется. static является глобально «общей» переменной для этого класса.

Ответ №3:

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

Комментарии:

1. неееет, статические переменные — это ЗЛО. не используйте их для сохранения состояния, особенно в тех случаях, когда переменная экземпляра выполняет эту работу.