#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. неееет, статические переменные — это ЗЛО. не используйте их для сохранения состояния, особенно в тех случаях, когда переменная экземпляра выполняет эту работу.