在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
现在的问题是:
我见过这种方法的链接是
检查方法
void InstallUncaughtExceptionHandler()
答案 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 ++方法(或函数),那么您应该遵循这种风格。