Кластеры класса Objective-C и инициализаторы частного класса
Обычно, будучи хорошим гражданином Какао, я пишу свои инициализаторы, возвращающие тип id
(т. е. указатель на общий объект) для упрощения создания подклассов позже (хотя в 99% случаев мне это не нужно).
Сейчас я создаю свой собственный кластер классов (множество частных классов ограничено одним открытым классом). Вопрос: мне все еще нужно определить инициализаторы частных классов как возвращающие универсальные id
указатель:
- (id)initSubclassForFooClassCluster;
или указатель на сам закрытый класс, например:
- (SubclassForFooClassCluster *)initSubclassForFooClassCluster;
1 ответ
Вы можете просто использовать (id) в своих методах инициализации, объявление более специфического типа мало что даст вам. Если вы действительно хотите сделать свои частные подклассы частными, вы должны использовать id, иначе вы будете передавать информацию о внутренностях вашего класса во внешний мир, когда эта информация на самом деле не нужна, в зависимости от того, что вам нужно.
NSString является кластером классов, и все его методы init возвращают id, поскольку один и тот же метод может возвращать разные типы объектов в зависимости от того, что вы передаете методу init.