要回答您的第一个问题:您的第 3 点)不是一种方法,它是一个普通的 C 函数原型(即使要由编译器正确验证,它也应该至少后跟一对空括号,以便语句是void sum()
)。
而且,关于您的第二个问题:您可以在 .h/.m 文件中的任何位置使用纯 C 函数声明语法,正如 Graham 指出的那样,您甚至可以在@interface
和@implementation
部分中声明它们;这样你也可以访问 ivar。
正如该线程中其他答案正确指出的那样,Objective-C 是 C 的超集,面向对象,因此在上述条件下,在某种程度上混合纯 C 声明语法和 Objective-C 语法是可以的。
一般来说,可以在 Objective-C 中使用 C 风格的函数(在@interface
and之外@implementation
),例如,某个特定的函数是一种通用的,并且与特定的类没有严格的关系。这个方向的经典例子是已经提到的
CGRect CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height)
如您所见,它处理坐标和大小,但与特定的东西没有严格的关系。这是一般的。此外,这种方法特别适合您的函数不仅是通用的,而且还必须处理 C 数据类型或 C 数据结构(例如,在我们的例子中 - CGFloat - 基本类型重新定义 - 和 CGRect - C 风格的数据结构)。
在@interface 和@implementation 部分中声明C 函数是一种在不构成方法的情况下实现访问ivars 的功能的方法,即您只能从它们所属的类中调用这些函数。
实际上,只要包含正确的包含(例如 stdio.h 或 fcntl.h),就没有什么是您无法从 Objective-C 方法中完成的;程序员只需质疑他/她必须实现的功能的优点,并据此了解编写 C 风格的函数是否合适,或者类/实例方法是否更合适。