请参阅 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 简洁且受到适当限制。