Это просто вызов конструктора суперкласса (в данном случае UIView).
Вам нужно вызвать конструктор UIView, чтобы убедиться, что все переменные, которые вы не видите в своем подклассе, установлены правильно, и это то, что вы делаете с [super init]
(или в этом случае initWithFrame:).
Есть несколько других причин, почему это выглядит так.
Прежде всего [super init]
может вернуть ноль. Возможно, что-то пошло не так, инициализируя вещи в коде суперкласса. Проверка на self != nil
гарантирует, что вы не используете объект, если с объектом что-то уже не так. Он мог даже быть выпущен супер-конструктором.
В других случаях супер-конструктор может фактически вообще возвращать другой объект. Примеры этого случаются с кластерами классов или при реализации синглтона.
Подведем итог:
- Всегда вызывать назначенный конструктор (т.е. метод init).
- Всегда используйте стандартную конструкцию
if ((self = [super init])) { /* own init */ } return self;
- Иногда это выглядит иначе, но только по особым причинам. В случае сомнений всегда используйте (2).
Документация Apple содержит гораздо больше информации по этому вопросу.
Кроме того, при переопределении таких конструкторов помните, что может быть несколько конструкторов. Например, если вы добавите представление с помощью Interface Builder, это представление будет инициализировано с использованием «initWithCoder:». Все конструкторы начинаются с "init".