简要描述.h和.m文件如何在目标c中进行交互?

RJ8*_*J86 24 objective-c

我刚刚开始学习目标C,我真的很困惑.h和.m文件是如何相互作用的.这个简单的程序有3个文件:

Fraction.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
Run Code Online (Sandbox Code Playgroud)

Fraction.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
Run Code Online (Sandbox Code Playgroud)

的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;
    }
Run Code Online (Sandbox Code Playgroud)

据我所知,该程序最初开始运行main.m文件.我理解基本的C概念,但这整个"类"和"实例"的东西真的很混乱.在Fraction.h文件中,@interface将分子和分母定义为整数,但是下面用(void)做了什么呢?以下重新定义的目的是什么?我也对Fraction.m的(void)和(int)部分发生了什么以及如何在main.m文件中汇总所有这些内容感到困惑.我想我想说的是,这似乎是一个相当容易的程序来了解不同部分如何相互协作 - 任何人都可以用非技术术语解释一下吗?

Chr*_*cke 63

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

实际上,非常非常简单.

为了建立项目集成开发环境 - 比如XCode - 忽略所有.h文件.他们所做的是获取每个.c和.m文件并进行编译.如果程序员(那是你)使用了任何#include或#import指令,编译器会在指令所在的位置插入包含/导入的.h文件的整个文本.

所以,如果你有一个.h文件 - insert.h - 说:

in
Run Code Online (Sandbox Code Playgroud)

一个.c文件说:

Alice
#include "insert.h"
Wonderland
Run Code Online (Sandbox Code Playgroud)

在处理完#include&#import指令后,编译器会看到:

Alice
in
Wonderland
Run Code Online (Sandbox Code Playgroud)

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

.h非常简单的一种约定,通过这种约定,程序员可以使用#include或#import告诉对方文件适合合并 - 可能多次合并.

.c和.m文件不会像这样合并.每个.c和.m文件单独编译 - 生成.o文件.每个.o文件都是已编译函数的集合.然后合并.o文件 - 或"链接" - 以生成最终程序.链接步骤确保每个函数只存在一次,并且所有被调用的函数实际上都存在于某处.

C&Objctive-C定义了一个必须存在于某处的特殊函数 - main().同样,语言非常宽松 - 它不关心main()函数所在的.c或.m文件.仅仅是它存在于某个文件中.


djh*_*rld 13

您需要了解面向对象编程,或者更多地了解Objective-C开发,以便更好地掌握OOP等概念

要回答你的问题".h和.m文件之间有什么区别",.h文件包含你的类的声明,所以基本上它可以利用所有的属性和方法..m文件是这些方法的实现.

在外行人看来,头文件(.h)是一种说"这就是我能做的"的方式,而.m是"我就是这样做的".尽管如此,它有点复杂.


Phi*_*ipp 6

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

学习Objective-C的一个很好的起点是Objective-C语言入门.