Objective c 简要描述.h和.m文件如何在objective c中交互?

Objective c 简要描述.h和.m文件如何在objective c中交互?,objective-c,Objective C,我刚刚开始学习objective C,对.h和.m文件如何相互作用感到非常困惑。此简单程序有3个文件: 分数.h #import <Foundation/NSObject.h> @interface Fraction : NSObject { int numerator; int denominator; } - (void) print; - (void) setNumerator: (int) n; - (void) s

我刚刚开始学习objective C,对.h和.m文件如何相互作用感到非常困惑。此简单程序有3个文件:

分数.h

 #import <Foundation/NSObject.h>
    @interface Fraction : NSObject {
        int numerator;
 int denominator;
    }
    - (void) print;
    - (void) setNumerator: (int) n;
    - (void) setDenominator: (int) d;
    - (int) numerator;
    - (int) denominator;
    @end
#导入
@接口分数:NSObject{
整数分子;
整数分母;
}
-(作废)打印;
-(void)集合分子:(int)n;
-(void)集合分母:(int)d;
-(int)分子;
-(int)分母;
@结束
分数m

 #import "Fraction.h"
    #import <stdio.h>
    @implementation Fraction
    -(void) print { printf( "%i/%i", numerator, denominator ); }
    -(void) setNumerator: (int) n { numerator = n; }
    -(void) setDenominator: (int) d { denominator = d; }
    -(int) denominator { return denominator; }
    -(int) numerator { return numerator; }
    @end
#导入“分数.h”
#进口
@实现分数
-(void)print{printf(“%i/%i”,分子,分母);}
-(void)setNumerator:(int)n{numerator=n;}
-(void)集合分母:(int)d{分母=d;}
-(int)分母{返回分母;}
-(int)分子{返回分子;}
@结束
Main.m

 #import <stdio.h>
    #import "Fraction.h"
    int main(int argc, char *argv[]) {
        Fraction *frac = [[Fraction alloc] init];
 [frac setNumerator: 1];
 [frac setDenominator: 3];
 printf( "The fraction is: " );
 [frac print];
 printf( "\n" );
 [frac release];
 return 0;
    }
#导入
#导入“分数.h”
int main(int argc,char*argv[]){
分数*frac=[[分数分配]初始];
[frac setNumerator:1];
[分形集分母:3];
printf(“分数为:”);
[压裂打印];
printf(“\n”);
[压裂释放];
返回0;
}

据我所知,程序最初开始运行main.m文件。我理解基本的C概念,但是整个“类”和“实例”的东西真的很混乱。在Fraction.h文件中,@接口将分子和分母定义为整数,但它在下面使用(void)做什么?下面重新定义的目的是什么?对于分数.m的(void)和(int)部分发生了什么,以及所有这些是如何在主.m文件中结合在一起的,我也非常困惑。我想我想说的是,这似乎是一个相当容易的程序,可以了解不同部分如何相互作用-有人能用非技术术语解释吗?

文件根本不交互,使用它们只是一种约定,您还可以将所有内容都放在
main.m
文件中


学习Objective-C的一个很好的起点是。

您需要深入了解Objective-C开发,或者多读一点,以便更好地掌握OOP等概念

为了回答您的问题“.h和.m文件之间的区别是什么,.h文件包含类的声明,因此基本上它可以使用的所有属性和方法。.m文件是这些方法的实现


用外行术语来说,头文件(.h)是表示“这是我能做的”的一种方式,而.m是“这是我如何做的”。但它比这要复杂一些。

简而言之,Objective-C类是一个C结构。实例是对已在内存中分配的结构的引用。类有名称,实例有状态或值

将Objective-C类与C结构区分开来的一点是能够按名称查找方法地址。简而言之,该结构有一个由名称键控的函数指针哈希表

Objective-C对象中还有很多其他细节,比如引用计数,但按名称调用方法是关键。SEL是C字符串,但C字符串不是SEL

对于头文件和源文件,按照惯例,可以在头文件中声明类的接口,并在源文件中定义方法。在头文件中定义类型和常量以外的内容是一种糟糕的做法,包括源文件也是如此。您可以在源文件中自由声明所需的任何内容,但它本质上是源文件的私有文件


C可执行文件,也就是Objective-C可执行文件,在主函数处有一个入口点。按照惯例,main在Objective-C项目中定义在一个同名文件中。

来自其他环境的人似乎总是相信,C和Objective-C编程中使用的.C、.m和.h文件正在发生复杂的事情

实际上,它非常非常简单

为了构建项目集成开发环境(如XCode),请忽略所有.h文件。他们所做的是获取每个.c和.m文件并编译它。如果程序员(即您)使用了任何#include或#import指令,编译器将插入指令所在的include/imported.h文件的整个文本

因此,如果您有一个.h文件-insert.h-表示:

in
Alice
#include "insert.h"
Wonderland
还有一个.c文件,上面写着:

in
Alice
#include "insert.h"
Wonderland
在处理#include&#import指令后,编译器将看到以下内容:

Alice
in
Wonderland
正是这种非常简单的文件合并行为,我们用来制作复杂的程序:)

.h是一种非常简单的约定,程序员可以通过该约定相互告知文件适合合并(可能多次)使用#include或#import

.c和.m文件不是那样合并的。每个.c和.m文件都分别编译,以生成.o文件。每个.o文件都是编译函数的集合。然后将.o文件合并或“链接”以生成最终程序。 链接步骤确保每个函数只存在一次,并且所有被调用的函数实际上都存在于某个地方


C&Objctive-C定义一个必须存在于某处的特殊函数-
main()
。同样,该语言非常轻松-它不关心
main()
函数在哪个.c或.m文件中。只是它存在于某个文件的某个地方。

下面的Fraction.h代码行只不过是getter方法。他们没有重新定义上面声明的两个int变量

- (int) numerator;
- (int) denominator;

这是最好的答案。