По моему опыту, используя две концепции в C # и ObjC, я использую функции для тех же проблем.Добавление новых экземпляров или статических методов к встроенным типам, когда создание подклассов либо недопустимо, либо не рекомендуется.
Я стараюсь избегать Категорий / Расширений, потому что они могут быть запахом кода, который вы слишком сильно полагаетесь на встроенные классы вместо того, чтобы создавать собственные структуры данных для представления вашей системы.
* 1004С учетом вышесказанного я не сталкивался с какими-либо странными ошибками, когда вы понимаете синтаксические различия.