1

在 iOS 中,我知道我们可以定义方法

 1.) -(void)sum i.e. a instance method.

 2.) +(void)sum i.e. a static method.

但是写成的方法呢

 3.) (void)sum i.e without -(hyphen) and +(plus) sign 

现在的问题是:

  1. 我们称之为第 3 点中写的方法?
  2. 我们何时以及如何使用它们?

我见过这种方法的链接是

iOS 中的异常处理。

检查方法

void InstallUncaughtExceptionHandler()
4

3 回答 3

3

要回答您的第一个问题:您的第 3 点)不是一种方法,它是一个普通的 C 函数原型(即使要由编译器正确验证,它也应该至少后跟一对空括号,以便语句是void sum())。

而且,关于您的第二个问题:您可以在 .h/.m 文件中的任何位置使用纯 C 函数声明语法,正如 Graham 指出的那样,您甚至可以在@interface@implementation部分中声明它们;这样你也可以访问 ivar。

正如该线程中其他答案正确指出的那样,Objective-C 是 C 的超集,面向对象,因此在上述条件下,在某种程度上混合纯 C 声明语法和 Objective-C 语法是可以的。

一般来说,可以在 Objective-C 中使用 C 风格的函数(在@interfaceand之外@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 风格的函数是否合适,或者类/实例方法是否更合适。

于 2013-05-02T07:40:47.440 回答
3

这是一个基于 C 的函数。因为 Objective-C 是 C 的超集,所以您仍然可以使用和声明 C 函数。

CoreGraphics是用C编写的,一个例子是CGRectMake函数:

 CGRect CGRectMake (
   CGFloat x,
   CGFloat y,
   CGFloat width,
   CGFloat height
 );
于 2013-05-02T07:26:40.923 回答
0

如您所知,Objective-C 是 C 之上的一个薄层,而且是 C 的严格超集。因此您也可以在 Objective-C 中使用 C 和 C++ 代码。第 3 点中编写的方法是 C 方法(或函数,等等)。如果你需要在 Objective-C 中使用 C 或 C++ 方法(或函数),那么你应该遵循这种风格。

于 2013-05-02T07:30:50.500 回答