Кластеры класса Objective-C и инициализаторы частного класса - PullRequest
3 голосов
/ 01 сентября 2011

Обычно, будучи хорошим гражданином Какао, я пишу инициализаторам, возвращая тип id (т. Е. Указатель на универсальный объект) для упрощения создания подклассов позже (хотя в 99% случаев мне это не нужно).

Сейчас я создаю свой собственный кластер классов (множество частных классов ограничено одним открытым классом). Вопрос: мне все еще нужно определить инициализаторы частных классов как возвращающие общий указатель id:

- (id)initSubclassForFooClassCluster;

или указатель на сам приватный класс, например:

- (SubclassForFooClassCluster *)initSubclassForFooClassCluster;

1 Ответ

1 голос
/ 09 сентября 2011

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

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

...