Как вы, похоже, понимаете, в Obj-C нет "переменных класса". Обходной путь - это просто переменная в стиле C (глобальная, или область действия файла), которую вы устанавливаете аналогично тому, как вы показали выше. Прежде всего, вы должны использовать область видимости для этих переменных, пометив их ключевым словом static
:
static NSString *areaName = nil;
Вы также можете рассмотреть возможность использования соглашения, такого как FirstLetterUppercase
, для указания разницы в области видимости.
Что касается управления памятью, вы можете обращаться с ним точно так же, как с переменной экземпляра, но она никогда не исчезнет навсегда:
static NSString *AreaName = nil;
+ (void)setAreaName:(NSString *)name {
if (![name isEqualToString:AreaName]) {
[AreaName release];
AreaName = [name copy];
}
}
Обратите внимание, что во втором примере вы НЕ должны освобождать переменную "class" из экземпляра -dealloc
метода. Если у вас есть более одного экземпляра объекта, это оставляет плохой висячий указатель и в любом случае побеждает назначение переменной «class». Обычно, когда вы используете этот шаблон, вы «утечете» (для некоторого определения утечки) значение переменной класса, и это нормально.