2013-05-27 2 views
1

Я понимаю, что назначение инициализатора - установить переменные экземпляра для определенных значений. Однако я смущен тем, почему вы хотите иметь несколько инициализаторов для каждой переменной экземпляра. Не может ли один инициализатор установить все переменные экземпляра? На мой вопрос, на самом деле, это вопрос практичности наличия нескольких инициализаторов в классе. Например класс имеет следующее:Что представляет собой назначение нескольких инициализаторов

- (id)initWithItemName:(NSString *)name 
    { 
    return [self initWithItemName:name valueInDollars:0 serialNumber:@""]; 
    } 

Между тем назначенный инициализатор дается как таковой:

- (id) initWithItemName:(NSString *)name valueInDollars:(int)value 
            serialNumber:(NSString *)sNumber; 

Назначенный инициализатор, как вы можете видеть, уже инициализирует переменную ITEMNAME. Итак, что означает, что у него есть определенный инициализатор только для одной переменной.

+0

Я собирался напечатать хороший длинный ответ, но я вижу, что Блейк сделал это сначала ... так вот немного документации от Apple, которая может немного объяснить ситуацию: [Несколько инициализаторов и назначенный инициализатор] (http://developer.apple.com/library/ios/Documentation/General/Conceptual/CocoaEncyclopedia/Initialization/Initialization.html#//apple_ref/doc/uid/TP40010810-CH6-SW3). –

ответ

1
  • Значения по умолчанию. Если вы используете назначенный инициализатор со значением по умолчанию, которое вы должны указывать каждый раз, может быть больно, если вы хотите изменить это значение по умолчанию, потому что вам нужно будет перейти к каждому экземпляру этого инициализатора и изменить значение. Если у вас есть инициализатор, который централизует местоположение значения по умолчанию, его легко изменить.
  • Устаревание. Если вам нужно добавить переменную в класс и в инициализатор позже, то гораздо проще не менять каждое место, которое инициализирует переменную, когда вам не нужно указывать значение.