@ Ответ Абизерна хороший. Я бы добавил, что категории являются формой динамической диспетчеризации, в частности, они могут использоваться для расширения существующих классов без создания подклассов.
Тем не менее, объектно-ориентированное программирование - это скорее философия дизайна, чем набор языковых функций. Кто-то может спросить: «Какой функции ООП соответствует приращение постфикса?» Ответ «нет, это особенность языка». Категории в основном не используются для реализации ООП-дизайна (хотя иногда они используются, как отмечено выше). Их первоначальное использование было разбивать большие файлы реализации. Их последующее использование состояло в предоставлении неофициальных протоколов из-за недостатка в языке (отсутствие @optional
). И сегодня они в основном используются для разделения кода по линиям, специфичным для платформы (NSString+UIStringDrawing
против NSString+AppKitAdditions
).
Расширения аналогичны категориям и аналогично представляют собой в основном языковую функцию, а не функцию разработки ООП. Они в некоторой степени облегчают инкапсуляцию, но в основном являются побочным эффектом произвольного требования компилятора определять методы перед их использованием (я говорю «произвольный», потому что это не связано с потребностями проектирования или разработки; это просто упрощает компилятор). Расширения не следует путать с некоторыми глубокими требованиями ООП.
Таким образом, использование категорий для добавления дополнительных функций во время выполнения является динамической отправкой. Кроме того, это просто языковая функция, которая используется для нескольких не-ООП вещей.