将方法放在单独的文件中

时间:2010-05-25 11:22:02

标签: objective-c cocoa xcode

我有一个类(MyClass),有很多方法。因此,.m文件变得非常难以阅读。我对Objective-C(来自REALbasic)相对较新,我想知道是否可以将MyClass中的一些方法放入不同的文件中,然后将它们包含在类中。我将如何在Xcode中解决这个问题?

3 个答案:

答案 0 :(得分:9)

是的,有可能,幸运的是,这可以通过Categories在Objective-C中轻松完成。


假设您有基类MyClass

@interface MyClass : NSObject
-(void) methodA;
@end

相应的实施文件(此处不相关)。

然后,您可以通过在新的头文件中定义新接口来创建类别:

// the category name is in parenthesis, can be anything but must be unique
@interface MyClass (extended) 
-(void) methodB;
@end

和实施文件:

@implementation MyClass (extended)
-(void) methodB {

}
@end

命名这些文件的通用约定是 ClassToAddMethodsTo + CatgoryName ,即:

MyClass+extended.h
MyClass+extended.m

将相关功能分组到类别中并为其命名。

答案 1 :(得分:5)

在Objective-c中,您可以将一个类分成“categories” - 一个跨越许多文件的类。正常的面向对象方式是使用SuperClasses和SubClasses。

这几乎可以肯定是code smell告诉您存在设计问题。见antipattern

答案 2 :(得分:0)

你可以做一件事..........
但要注意,有些人可能会认为这是纯粹的亵渎。 :)

假设您有一个类,您希望在单独的文件中使用两种方法。 你将有三个文件:

•Class.h
•Class.m
•Class_otherMethod.m



您的 Class.h 应该与其他任何内容一样。我认为最好保持头文件完整,但这个'技巧'也适用于分离.h文件。

@interface Class : NSObject

- (void) method;
- (void) otherMethod;

@end


Class.m 文件中,您#include内的{strong> Class_otherMethod.m Class @implementation就像这样:

#import "Class.h"

@implementation Class

- (void) method {

    // do something.
}


#include "Class_otherMethod.m"

@end


您的 Class_otherMethod.m 文件只有bareMethod实现:

- (void) otherMethod {

    // do something different.
}




为什么会这样?

实际上很简单。预处理器只是在 Class.m 文件中“粘贴” Class_otherMethod.m 的内容,编译器将其视为一个大的长文件。 :P