2012-09-24 29 views
6

我是一个新手,试图将免费软件应用程序上次更新到2008年,并且自(显然)被程序员放弃,他们没有回复我的电子邮件,以及既为目前的MacOS更新它,也为iPhone创建一个版本。我想这将是一个漫长而有点噩梦的过程,但我很期待学习。新手试图了解.h文件中的多个@interface

现在我在开始阶段,我期待在原始以下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后跟一个冒号是什么?

非常感谢您的帮助解释。

回答

8

它被称为类别。类别对扩展类很有用(当你没有它们的源代码,比如UIKit或者Foundation类)或者将一个类的扩展/高级功能从它的基本方法中分离出来时(这是你遇到的情况)。

它们也可用于在.m文件中的实现(而非声明)上下文中模拟私有方法。

更多的话题在Apple Developer.

+1

我也喜欢在我的.m文件的顶部声明接口以实现人造私有方法,因为这些接口只能由类本身看到,而不能由其他类看到(当然,它们仍然可以调用,应该一个外部类现在他们在那里)。 – Simon

+0

@Simon yep,我也会补充一点。 – 2012-09-24 18:34:09

+0

非常感谢! –