Самоанализ
Самоанализ относится к свойственной возможности объекта обнародовать, по запросу, его существенным характеристикам во время выполнения. Путем отправки объектам определенных сообщений можно задать им, вопросы о себе как объекты и время выполнения Objective C предоставляют Вам ответы. Самоанализ является важным инструментом кодирования, потому что он делает Ваши программы более эффективными и устойчивыми. Вот несколько примеров того, как самоанализ мог бы быть полезным:
Можно вызвать методы самоанализа как проверки на этапе выполнения, чтобы помочь Вам избежать проблем, таких как исключения, которые, например, произошли бы, если Вы отправляете сообщение в объект, который не может реагировать на него.
Можно также использовать самоанализ, чтобы помочь определить местоположение объекта в иерархии наследования, которая дала бы Вам информацию о возможностях объекта.
Типы информации о самоанализе
NSObject
протокол, принятый NSObject
класс, определяет методы самоанализа, приводящие к следующим видам информации об объекте:
Членство в классе. Чтобы определить, наследовался ли объект, прямо или косвенно, от определенного класса, отправьте его
isKindOfClass:
передайте и оцените результат. Если объект является прямым экземпляром данного класса, этот метод говорит Вам. Можно также использоватьclass
иsuperclass
методы, чтобы получить класс или суперкласс объекта и затем использовать тот результат в операциях сравнения.Сообщения ответили на. Чтобы узнать, реализуют ли класс или суперкласс объекта метод, отправьте объект a
respondsToSelector:
сообщение. Параметр является aSEL
- введенное значение, созданное из подписи метода с помощью@selector
директива. Например:BOOL doesRespond = [anObject respondsToSelector:@selector(writeToFile:atomically:)];
Соответствие протокола. Если класс будет соответствовать формальному протоколу, то можно ожидать, что он реализует требуемые методы того протокола и отправит сообщения в него соответственно. Используйте
conformsToProtocol:
метод для получения этой информации. Вы указываете параметр этого метода с помощью@protocol
директива.