Ответ 1
Да, это возможно. Синтаксис:
@interface NSDate (CategoryName) <ProtocolName>
@end
@implementation NSDate (CategoryName)
@end
Здесь документация Apple по теме.
Это также можно сделать с помощью расширения класса. Мне очень нравится частное согласование протоколов делегатов. Это скрывает детали реализации того, что они являются делегатами какого-либо класса из открытого интерфейса и удаляет зависимость из заголовка.