【问题标题】:Objective C class definition confusionObjective C 类定义混淆
【发布时间】:2009-03-27 13:32:56
【问题描述】:

我正在通过 Cocoa 学习 Objective-C(并且很喜欢它)。我正在关注一个教程。有一个名为 Menu 的类,界面看起来像这样。

@interface Menu: MenuObject {}
@end

@interface MenuLayer : LayerObject {}
-(void) someMethod:(id)sender
-(void) someOtherMethod:(id)sender
@end

并且实现遵循相同的约定

@implementation Menu
    -(id)init{
        // blah blah blah
    }
@end

@implementation MenuLayer
    // init, someMethod and someOtherMethod stuff here
@end

在我看来,这两个单独的对象/类在同一个文件中定义和实现。这样做有理由吗?如果我将 .h 和 .m 文件拆分为 Menu.h/.m 和 MenuLayer.h/.m ,结果会相同吗?还是我误解了一些基本的东西?

【问题讨论】:

    标签: objective-c cocoa object


    【解决方案1】:

    如果你把它们分成单独的文件应该没问题。大多数情况下,当您看到事情以这种方式实现时,仅仅是因为这两个类紧密耦合在一起,以至于您真的永远不会在没有另一个的情况下使用其中一个。

    所以,这实际上只是一种风格。它们在同一个文件中定义和实现这一事实并没有什么“魔力”。

    【讨论】:

    • 此外,许多教程和书籍将接口和实现放在同一个文件中以节省页面空间,和/或将包含和 .h/.m 的讨论推迟到以后。
    【解决方案2】:

    这只是个人喜好问题。您应该能够将它们分开,只要您 #import 必要时将其中一个标题与另一个标题分开即可。 Objective-C 只是让您可以选择将类组合在文件中,而不是 Java 强制您将它们拆分。如果类密切相关,则可以更轻松地在一个文件中查看整个事物的工作原理,而不必在多个文件之间切换。

    【讨论】:

      【解决方案3】:

      您的评估是正确的。正在声明和定义两个单独的类。

      这样做的可能原因是两个类都是必需的,以便执行Menu 所做的任何事情。将这两个类放在同一个标​​头和源代码中只会使界面更加紧凑。

      将它分成两个文件仍然可以。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-07-31
        • 2015-06-22
        • 1970-01-01
        • 2012-06-14
        • 1970-01-01
        • 1970-01-01
        • 2011-12-22
        相关资源
        最近更新 更多