Всякий раз, когда считается хорошей / плохой практикой, это более или менее субъективно.Когда что-то делает изначально правильно / неправильно, это более или менее объективно.
isKindOfClass:
- это полезный метод проверки наследования классов.Он отвечает на единственный вопрос: «Является ли объект класса (подкласс) данного класса?».Он не отвечает ни на какие другие вопросы, такие как «этот объект реализует этот метод по-своему?»или «я могу использовать объект для X или Y?».Если вы используете isKindOfClass:
по назначению, у вас не возникнет никаких проблем.В конце концов, в динамическом типизированном языке у вас должны быть инструменты для извлечения метаинформации об объектах.isKindOfClass:
- это только один из доступных инструментов.
Тот факт, что некоторые объекты могут лгать о своем классе, не должен вас отталкивать.Они просто маскируются под объекты другого класса, ничего не нарушая.И если это ничего не нарушает, почему я должен беспокоиться?
Главное, что вы всегда должны помнить, использовать правильный инструмент для любой цели.Например, isKindOfClass:
не заменяет respondsToSelector:
или conformsToProtocol:
.