Iphone 目标C:类只是a.m和.h文件吗?

Iphone 目标C:类只是a.m和.h文件吗?,iphone,objective-c,class,Iphone,Objective C,Class,我仍然在学习Objective-C中的类和对象 类仅仅是接口和实现文件的组合吗?或者,换一种说法,你什么时候会对自己说“我需要一个新的.m文件来处理这个问题”。目前,当我想把某些方法和变量放在一个单独的地方,这样我的主代码就不会变得庞大时,我就创建了一个新的实现文件 任何帮助都将不胜感激。严格按照惯例,而不是必须,每个新类都应该有一个接口文件(.h文件)和一个实现文件(.m文件) 至于使用新的.m文件来分发方法,这很好。在Objective-C类中有一对接口和实现。这些文件不必放在单独的文件中,

我仍然在学习Objective-C中的类和对象

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


任何帮助都将不胜感激。

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


至于使用新的.m文件来分发方法,这很好。

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

不是。您可以将多个类放在一个.h和.m文件中,尽管这被认为是不好的做法。

我承认偶尔会将几个类分组在一起,要么使用all-in-one.h的定义和one.m的实现,要么在某些类为“private”的情况下使用“internal”的定义和实现以主修课的.m为单位上课

我认为用这种方式避免文件的扩散,并将相互依赖的类分组在一起,有时是很好的


您也可以选择另一种方式——使用“类别”在多个文件中传播类的定义和/或实现——但这有点难看,通常应该保留用于扩展具有专门功能的框架类。(即使是这样,还是有些担心。)

虽然惯例规定每个类有一对.h和.m文件,前者包含@interface,后者包含@implementation,但没有这样的要求,事实上,系统提供的许多类在接口和实现上被划分为多个文件

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

绝对最小类定义为:

@implementation Foo
@end
@interface Foo:NSObject
@end
@implementation Foo
@end
因为上面定义了一个类
Foo
,它是一个新的根类。但是,编译器将对此发出警告

实际上,最小类定义是:

@implementation Foo
@end
@interface Foo:NSObject
@end
@implementation Foo
@end
请注意,
NSObject
是故意的;如果要创建一个与系统框架甚至系统运行时兼容的类,则非常需要从NSObject继承

从语法上讲,如何区分
@接口
@实现
取决于您。传统上,接口放在头文件中,这样其他人可能会#导入并使用它,而实现则放在编译单元(一个.m文件)中,以便只编译和链接一次

但这是惯例,不是要求。我经常在一个.m文件中定义一个类---@interface+@implementation--完全用于其他类的@implementation;实际上,这是一个私人课堂


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

+1是的,如果这个答案不完全清楚,除非你有理由这样做(如果你刚刚开始,你不会这么做),为每个新类创建一个新的.m/.h对。@achiral:您也可以使用类别拆分类接口定义。如果你愿意,可以查一下。