Назначение шаблона init в obj-c и его использование - PullRequest
1 голос
/ 04 января 2012

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

Зачем это нужно?

и

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

Я пришел из Java, поэтому не до конца понимаю - наиболее подходящим для меня в java был шаблон синглтона, но часть, называемая выделенным инициализатором, не имела для меня смысла, поскольку в Java у вас есть выбор тогда ты "должен".

может любой уточнить .... thx

1 Ответ

2 голосов
/ 04 января 2012
  1. Шаблон инициализатора необходим, потому что класс super, инициализатор которого вы вызываете, может возвращать любой тип объекта, не обязательно экземпляр этого класса. Вот как, например, работает NSString, на самом деле это кластер классов, реализующих разные типы строк, оптимизированных для разных моделей использования. Таким образом, вызов self = [super init] для NSString потомка создает self, например, NSCFString instance.

  2. В Objective C. есть шаблон под названием Назначенный инициализатор . Если в классе много инициализаторов, один из них выбирается как назначенный, а все остальные должны быть реализованы путем его вызова, а не супер. Это важно для корректного переопределения инициализаторов в дочерних классах, вы должны инициализировать только указанный, и он будет вызываться при любых обстоятельствах (при условии, что ваш код хорошо написан и использует преимущества назначенных инициализаторов, конечно:)

...