У меня сложилось впечатление, что расширения классов в Objective C были просто анонимными категориями. Однако вы можете добавлять свойства к этим расширениям классов, что невозможно в категориях, поэтому я немного запутался:
#import "Money.h"
@interface Money ()
@property(nonatomic) NSUInteger amount;
@end
@implementation Money
@end
Как реализованы расширения классов? Как категории? Тогда почему вам разрешено добавлять к нему iVars? Когда к классу добавляются расширения класса, во время компиляции или при загрузке класса?