2015-09-09 8 views
0

что это высказывание, как указано в яблоках документа:Назначенный инициализатор?

Иногда назначенный инициализатор суперкласса может быть достаточен для подкласса, и поэтому нет никакой необходимости в подклассе реализовать свой назначенный инициализатор. В других случаях инициализатор класса может быть переопределенной версией назначенного инициализатора суперкласса. Это часто бывает, когда подкласс должен дополнять работу, выполняемую инициализатором назначенного суперкласса, хотя подкласс не добавляет собственные переменные экземпляра (или переменные экземпляра, которые он добавляет, не требуют явной инициализации).

Apple's Documentation

ли это о том, что я не должен создать обозначенный инициализатор для подкласса и суперкласс назначенного инициализатора будет достаточно, и если да, то каким будет свойство подклассов инициализируются? и в каком сценарии, если это разрешено? Как это будет работать?

Также, если вы переопределяете DI, как вы можете вызвать этот метод из подкласса, поскольку родительский класс имеет тот же DI, что и вы? Что значит, что нужно дополнить эту работу?

ответ

3

Пример:

Существует суперкласс A с initWithName: DI.

Теперь вы создаете подкласс B. Если вам нужен один и тот же DI, и вам не нужна дополнительная инициализация, то нет никакого отношения к методу init. Вы просто звоните:

B *someBObject = [[B alloc] initWithName:@"A Name"]; 

Это создает B объект и вызывает метод initWithName: от A.

Теперь, если ваш B класс должен делать дополнительную работу в методе initWithName:, то добавьте в B.m:

- (instancetype)initWithName:(NSString *)name { 
    self = [super initWithName:name]; 
    if (self) { 
     // do some additional stuff to initialize this "B" instance 
    } 

    return self; 
} 
+0

Для первой части, что ваше высказывание находится в том случае, если у меня нет каких-либо методов инициализации в моем подклассе, но у меня есть другие методы и свойства, но при вызове метода инициализации DI будут также инициализированы свойства и методы в подклассе? или это будет только родительский класс и классы, которые инициализируются? –

+0

Если у вас есть что-то в подклассе, который должен быть инициализирован, ваш подкласс должен переопределить любые необходимые инициализаторы, чтобы он мог правильно инициализировать эти значения. – rmaddy