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