Использование свойств для доступа к iVars в init? - PullRequest
3 голосов
/ 03 ноября 2010

Это ответвление от предыдущего вопроса, это плохая практика (использование свойства для установки iVars)?

// Designated initializer 001
- (id)initWithName:(NSString *)newName andType:(NSString *)newType {
    self = [super init];
    if(self) {
        [self setName:newName];
        [self setType:newType];
    }
    return self;
}

или я должен использовать ...

// Designated initializer 002
- (id)initWithName:(NSString *)newName andType:(NSString *)newType {
    self = [super init];
    if(self) {
        name = [newName retain];
        type = [newType retain];
    }
    return self;
}

Я использую версию 001, но меня считают, что использование свойств для доступа к iVars в init или dealloc - плохая практика.

РЕДАКТИРОВАТЬ: Добавлено retain до версии 002

Гэри.

1 Ответ

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

Да, Apple не рекомендует использовать аксессоры в init или dealloc, потому что они могут иметь побочные эффекты помимо простой установки переменной экземпляра.Это явно нежелательно в неинициализированном или уничтоженном объекте.

Точная цитата из документов: «Единственные места, где вы не должны использовать методы доступа для установки переменной экземпляра, это методы init и dealloc».

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