Objective-C:类只是一个.m和.h文件吗?

时间:2011-09-16 00:21:13

标签: iphone objective-c class

我仍在使用Objective-C中的类和对象。

类只是接口和实现文件的组合吗?或者,换句话说,你什么时候对自己说“我需要一个新的.m文件”。目前,当我想将某些方法和变量放在一个单独的位置时,我会创建一个新的实现文件,这样我的主代码就不会变得庞大。

非常感谢任何帮助。

5 个答案:

答案 0 :(得分:5)

严格按照惯例而非必要,每个新类都应该有一个接口文件(.h文件)和一个实现文件(.m文件)。

就使用新的.m文件分发方法而言,这很好。

答案 1 :(得分:2)

虽然约定规定了每个类的一对.h和.m文件,前者包含@interface而后者包含@implementation,但没有这样的要求,事实上,许多系统提供的类都是分开的在接口和实现中跨几个文件。

从技术上讲,您根本不需要@interface

绝对最小类定义是:

@implementation Foo
@end

因为上面定义了一个新的根类Foo。但是,编译器会对此发出警告。

实际上,最小类定义是:

@interface Foo:NSObject
@end
@implementation Foo
@end

请注意NSObject是故意的;如果你打算创建一个与系统框架兼容的类,或者甚至是系统运行时,那么非常需要从NSObject继承。

从语法上讲,由您如何区分@interface@implementation取决于您。传统上,接口进入头文件,以便其他人可以#import它并使用它,而实现进入编译单元 - .m文件 - 只需编译和链接一次。

但这是惯例,而不是要求。我经常定义一个类--- @interface + @implementation - 完全在一个.m文件中,仅用于其他类的@implementation;有效地,私人班级。

请注意,类扩展 - @interface Foo() - 是明确创建的,允许您在.h文件@interface Foo:NSObject之外的类上声明其他属性和方法。它允许类有效地拥有隐藏的API或创建一个公开只读和私有读写的属性。

答案 2 :(得分:1)

不,不是。您可以在.h和.m文件中放置多个类,但这并不是一种好的做法。

答案 3 :(得分:0)

在Objective-C类中有一对接口和实现。这些不必在单独的文件中,但通常是,这是保持文件结构清洁的好方法。通常类代表一个小工厂,当你有一组可以组合在一起的函数时,最好将它们放在一个类中。

答案 4 :(得分:0)

我承认偶尔会将几个类组合在一起,或者将所有的定义合并在一个.h中,将实现合并到一个.m中,或者,在某些类是“私有”的情况下,使用“和”的定义和实现。内在的“大班的.m课程”。

我认为以这种方式避免文件泛滥并将相互依赖的类组合在一起有时会很好。

你也可以采用另一种方式 - 使用“类别”在多个文件中传播类的定义和/或实现 - 但这很丑陋,通常应保留用于扩展具有专用函数的框架类。 (甚至在那时,也有些担心。)