我是一个新手,试图在2008年更新一个免费软件应用程序,然后(显然)被程序员放弃,他们没有回复我的电子邮件,并且都为当前的MacOS更新它并创建了一个适用于iPhone的版本。我想这将是一个漫长而有点噩梦般的过程,但我期待着学习。
现在我处于开始阶段,我正在查看原始的以下GeniusPair.h文件:
#import <Foundation/Foundation.h>
@class GeniusItem;
@class GeniusAssociation;
extern const int kGeniusPairDisabledImportance;
extern const int kGeniusPairMinimumImportance;
extern const int kGeniusPairNormalImportance;
extern const int kGeniusPairMaximumImportance;
@interface GeniusPair : NSObject <NSCoding, NSCopying> {
GeniusAssociation * _associationAB; //!< Stats for standard learning mode directional relationship.
GeniusAssociation * _associationBA; //!< Stats for Jepardy style learning mode directional relationship.
NSMutableDictionary * _userDict;
}
+ (NSArray *) associationsForPairs:(NSArray *)pairs useAB:(BOOL)useAB useBA:(BOOL)useBA;
- (id) initWithItemA:(GeniusItem *)itemA itemB:(GeniusItem *)itemB userDict:(NSMutableDictionary *)userDict;
//various other methods declared
@end
@interface GeniusPair (GeniusDocumentAdditions)
- (BOOL) disabled;
//various other methods declared
@end
@interface GeniusPair (TextImportExport)
- (NSString *) tabularTextByOrder:(NSArray *)keyPaths;
//various other methods declared
@end
我的问题是(问题是):为什么.h文件中有多个接口? @interface GeniusPair : NSObject
和@interface GeniusPair (TextImportExport)
之间有什么区别?在@interface
后跟括号中的内容与@interface
后跟冒号有什么关系?
非常感谢您的帮助解释。
答案 0 :(得分:8)
它被称为类别。类别对于扩展类(当您没有源代码,如UIKit或Foundation类)或将类的扩展/高级功能与其基本方法分离时很有用(这是您遇到的情况)。
当在.m
文件中的实现(而不是声明)上下文中使用时,它们也可用于模拟私有方法。
有关Apple Developer.的主题的更多信息。