新手试图理解.h文件中的多个@interface。

6
我是一名新手,想要使用一个免费应用程序,该应用程序最后更新于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后面加上括号里的内容与后面跟着冒号有什么不同?
非常感谢您的帮助和解释。
1个回答

8
它被称为类别。当你没有源代码(如UIKit或Foundation类)来扩展类,或者将类的基本方法与其扩展/高级功能分离时,类别非常有用(这是你遇到的情况)。
它们还可用于在实现上下文中(而非声明)中使用以模拟私有方法,在.m文件中。
有关该主题的更多信息,请参见Apple Developer

1
我也喜欢在我的.m文件顶部声明接口,以实现伪私有方法,因为这些方法只能被类本身看到,而不被其他类看到(当然,如果外部类知道它们的存在,它们仍然可以被调用)。 - Simon
@Simon 是的,我也会添加那个。 - user529758

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接