Установка значений по умолчанию для свойств NSString - PullRequest
0 голосов
/ 24 ноября 2010

Я пытаюсь определить рекомендуемый способ установки значений по умолчанию для свойств NSString.

Я понимаю, что небезопасно использовать методы доступа в методах класса init и dealloc.У меня часто есть строковые константы, которые я хотел бы назначить значения по умолчанию.Каков рекомендуемый способ сделать это (учитывая, что iVar будет выпущен в методе dealloc)?

Например, я понимаю, что следующее небезопасно:

@property (nonatomic, copy) NSString *identifier;
....

- (id) init
{ 
    self = [super initWithLayer:displayLayer];

    if (self != nil)
    {
        self.identifier = @"fireSpell01";
    }

    return self;
}

Это нормально, илиРекомендую сделать это:

identifier = [@"fireSpell01" retain];

Или я должен сделать это:

identifier = [[NSString stringWithString:@"fireSpell01"] retain];

1 Ответ

3 голосов
/ 24 ноября 2010

Просто сделайте это:

identifier = @"fireSpell01";

Нет необходимости retain строка. Строковые константы существуют на протяжении всей жизни программы и никогда не нуждаются в сохранении или освобождении. Выполнение [[NSString stringWithString:@"fireSpell01"] retain] просто создает ненужную копию и бессмысленно.

Чего вы хотите избежать, так это использования установщиков свойств в методах init и dealloc. Поскольку сеттеры могут иметь побочные эффекты, которые зависят от определенных значений состояния, вы не хотите вызывать их для частично построенных / частично разрушенных объектов. Гораздо лучше просто назначить непосредственно иварам и пропустить сеттеры во время init.

...