Objective C 中的接口和实现文件有什么意义?

What's the point of interface and implementation files in Objective C?

好的,所以我对编程世界还很陌生。我已经学习了 C 的基础知识,作为 Objective C 的基础。我一直在学习 Objective C 并开始熟悉这门语言,但一个紧迫的问题仍然存在:

我很难理解为什么会有接口和实现文件。拥有它的一部分有什么意义 public?当我学习 C 时,将所有内容都放在一个文件中对我来说更有意义。我认为我的问题在于我无法想象所有内容如何相互交互,例如在应用程序中,所以我试图找到一些某种 diagram/layman 的解释可以帮助我理解该过程如何从用户 clicking/pressing 按钮或输入数据和返回给用户的数据,但搜索没有结果。

总结一下:接口和实现文件的意义何在,为什么接口“public”——这对用户意味着什么?

很困惑。在此先感谢您的帮助。

Headers,如果做得好,请明确说明 class 的作用,因为它列出了 class 可以做的所有事情。拥有 public 和私有方法鼓励良好的设计。当您创建 class 时,您希望它执行某项任务或其他任务。它应该有一些方法来表示它在 header 文件中可以做的事情,然后在内部它应该有它需要的任何方法,但其他 classes 不应该调用。例如,您可能有一个 class 来处理和解析几种类型的文件和 returns object 相关类型的文件。您 header 文件可能如下所示:

@class DGCFileTypeA, DGCFileTypeB;
@class DGCObjectTypeA, DGCObjectTypeB;

@interface DGCFileParser : NSObject

- (DGCObjectTypeA *)parseFileA:(DGCFileTypeA *)fileA;
- (DGCObjectTypeB *)parseFileB:(DGCFileTypeB *)fileB;

@end

这使得您编写的所有其他需要解析这些类型文件的东西都可以。你的实现文件看起来像:

#import "DGCFileParser.h"
#import "DGCFileTypeA.h"
#import "DGCFileTypeB.h"
#import "DGCObjectTypeA.h"
#import "DGCObjectTypeB.h"

@implementation DGCFileParser

- (DGCObjectTypeA *)parseFileA:(DGCFileTypeA *)fileA {
    NSArray *fileLines = [self fileLinesForFile:fileA];
    /// Implementation details ///
    return result;
}

- (DGCObjectTypeB *)parseFileB:(DGCFileTypeB *)fileB {
    NSArray *fileLines = [self fileLinesForFile:fileB];
    /// Implementation details (presumably different than above) ///
    return result;
}

- (NSArray *)fileLinesForFile:(DGCFileType *)file {
    /// Implementation details on reading lines from a file ///
}

@end

现在您有了一个内部使用但不需要公开的方法,因为其他 class 不需要使用它,因为这是解析文件的 class。在一个应用程序中,某些东西需要解析一个文件并将它传递到这里并获得它需要的任何结果并且 class 不需要担心香肠是如何制作的。例如,它不需要关心这些行是否被读入数组,因为它只关心返回的 object.