2

我的问题是,我会知道如何将 2 个 .m 文件用于一个对象类,也用于一个标头(.h)

我有一个包含 20000 多行的大方法,并且我愿意,该方法在 .m 文件中独立,而其他方法在另一个 .m 文件中独立。我已经完成了,但我得到了错误,这些方法不在一个 .m 文件中。我收到链接错误,但如果我删除第二个 .m 文件,我可以删除链接错误。

是否可以为一个标题创建 2 个 .m 文件?

如果是,请告诉我怎么做?

4

3 回答 3

2

我有一个 20000+ 行的大方法

好吧,这就是你的问题。这就是你需要解决的问题。将事情分成两个实现文件会分散注意力。这是你的主要问题。几乎没有任何情况下这不是一种糟糕的做事方式。

方法最多应该有几十行。如果您发现自己编写的方法比这更长,则需要将功能分解成更小的部分。创建较小的方法来完成部分工作,然后从原始方法中调用这些方法。

类不应该是这个大小。如果您正在创建一个包含超过几千行代码的文件,那么这是一个巨大的警告信号,表明一个类负责过多的功能。您应该将功能分解为几个类,每个类负责一个关键功能。

我收到链接错误

如果你将这样的句子发布到 Stack Overflow,它应该伴随着你得到的实际错误。

于 2012-11-15T21:50:39.973 回答
1

您可以使过长的方法成为该类的类别:

MyClass.h:

@interface MyClass
@property ...
-(void) method;
...
@end

@interface MyClass (BigMethod)
-(void) bigMethod;
@end

我的班级.m:

@implementation MyClass
-(void) method
{
    ...
}
...
@end

大方法.m

@implementation MyClass (BigMethod)
-(void) bigMethod
{
    ...
}
@end

但是,20k 行方法是荒谬的。你真的应该重构它。

于 2012-11-15T21:49:00.167 回答
0

你有几种方法:

  1. 您可以将您的方法分为 2 个不同的类别:

    //-- MyClass1.m
    @implementation MyClass (part1)
    
    @end
    
    //-- MyClass2.m
    @implementation MyClass (part2)
    
    @end
    

    出于对称原因,我定义了 2 个类别;当然,您还需要类的“基础” @implementation(即,没有类别说明符);您可以选择是否定义“基础”和extension类别,或“基础”和两个类别等...

  2. 或者您可以尝试在第一个文件中包含第二个.m文件:

        //-- MyClass1.m
        @implementation MyClass
    
        <first part>
    
        #include "MyClass2.m"
    
        @end
    

两者都应该工作。

更不用说重构你的类的可能性了,这将是最好的选择。

于 2012-11-15T21:46:53.800 回答