Категории:
Категория - это способ добавления новых методов ко всем экземплярам существующего класса без изменения самого класса.
Вы используете категорию, когда хотите добавить функциональность к существующему классу, не наследуя его или не переписывая оригинальный класс.
Допустим, вы используете NSView
объекты в какао, и вы обнаружите, что хотите, чтобы все экземпляры NSView
смогли выполнить какое-то действие. Очевидно, что вы не можете переписать класс NSView
, и даже если вы наследуете его, не все объекты NSView
в вашей программе будут вашего производного типа. Решение заключается в создании категории на NSView
, которую вы затем используете в своей программе. Пока вы #import
заголовочный файл, содержащий объявление вашей категории, он будет выглядеть так, как если бы каждый NSView
объект реагировал на методы, которые вы определили в исходном файле категории.
Протоколы:
Протокол - это набор методов, которые любой класс может выбрать для реализации.
Вы используете протокол, когда хотите предоставить гарантию того, что определенный класс будет реагировать на определенный набор методов. Когда класс принимает протокол, он обещает реализовать все методы, объявленные в заголовке протокола. Это означает, что любые другие классы, которые используют этот класс, могут быть уверены, что эти методы будут реализованы, без необходимости знать что-либо еще о классе.
Это может быть полезно при создании семейства схожих классов, которые должны взаимодействовать с общим классом «контроллера». Связь между классом контроллера и контролируемыми классами может быть упакована в один протокол.
Дополнительное примечание: язык target-c не поддерживает множественное наследование (класс может наследоваться только от одного суперкласса), но большая часть той же функциональности может быть обеспечена протоколами, поскольку класс может соответствовать нескольким различным протоколам.