iOS不同类型的方法签名

时间:2013-05-02 07:21:32

标签: iphone ios

在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. 我们何时以及如何使用它们?
  3. 我见过这种方法的链接是

    Exception Handling in iOS.

    检查方法

    void InstallUncaughtExceptionHandler()
    

3 个答案:

答案 0 :(得分:3)

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

CoreGraphics是用C语言编写的,例如CGRectMake函数:

 CGRect CGRectMake (
   CGFloat x,
   CGFloat y,
   CGFloat width,
   CGFloat height
 );

答案 1 :(得分:3)

回答你的第一个问题: 你的点号3)不是一个方法,它是一个普通的C函数原型(即使要被编译器正确验证,它应该至少跟一对空括号括起来,这样语句就是void sum()

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

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

一般来说,人们可以在Objective-C(外部@interface@implementation)中使用C风格的函数,例如,当特定函数是一般目的而不是严格相关时到特定的班级。这个方向的经典例子是已经提到的

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相关;程序员只是质疑他/她必须实现的功能的优点,并且依赖于此,理解编写C风格的函数是否合适,或者类/实例方法是否更合适。

答案 2 :(得分:0)

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