См. Документацию Apple: https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocCategories.html
Это расширение класса, немного отличающееся от категории, так как оно не имеет имени в скобках.Вы используете его для объявления свойств и методов, которые должны оставаться закрытыми (вне заголовка), и для повторного объявления общедоступных свойств и методов только для чтения как конфиденциальных для чтения и записи.Это обеспечивает более чистую инкапсуляцию.
По запросу дружеский пример:
JYDuckPondManager.h
@interface JYDuckPondManager : NSObject
@property (nonatomic, assign, readonly) NSUInteger duckCount;
@property (nonatomic, assign, readonly) CGFloat waterLevel;
- (JYDuckReaction *)feedDucks:(JYDuckFood *)food;
- (JYDuckReaction *)harassDucks:(JYDuckTaunt *)taunt;
@end
JYDuckPondManager.m (расширение, мнимая реализация опущена)
@interface JYDuckPondManager ()
//// Redefined for internal modification
@property (nonatomic, assign, readwrite) NSUInteger duckCount;
@property (nonatomic, assign, readwrite) CGFloat waterLevel;
//// Internally exclusive properties
@property (nonatomic, strong) NSSet *duckPersonalitySet;
@property (nonatomic, assign) CGFloat flockAnxietyLevel;
//// Private messages
- (void)recalculatePondState;
@end
Другие объекты должны иметь возможность взаимодействовать с прудом, но они не должны знать определенные вещи, происходящие в пруду, или переопределять статистику пруда.Хранение гаек и болтов в удлинителе .m гарантирует, что .h будет кратким и соответствующим образом ограниченным.