在做Objective-c时,我是否必须编写如下函数:
- (int) someFunction: (int) a someParam: (int) b;
或者我可以使用常规C风格:
void someFunction(int a, int b);
如果我可以做C风格,那么在Objective-C风格中做这个有什么好处吗?
答案 0 :(得分:7)
如果您愿意,可以使用常规C函数,因为Objective-C只是C的超级集合。
如果要使用Objective-C功能(如类,消息,继承等),则需要使用Objective-C语法...当然还要使用Cocoa / CocoaTouch SDK。
您可以在文件中混合使用Objective-C和C代码,并使用Objective-C方法调用纯C函数。您还可以通过直接访问Objective-C运行时层(例如,使用objc_msgSend
函数)从纯C函数调用Objective-C方法。
答案 1 :(得分:7)
这不是Objective-C函数,它是一种方法。它可以访问实例的变量和其他方法。这两者并不相同。在大多数情况下,您应该使用Objective-C方法。为什么要使用C函数?你想做什么?
答案 2 :(得分:1)
第一个语句是方法声明,第二个语句是一个函数。它们是完全无关的两件事。两者都在Objective-C中被接受。但方法声明只能在@interface
@end
之间进行。函数声明不能在@interface
@end
答案 3 :(得分:0)
两者之间的区别在于泛型方法和实例方法之间的区别。第一个例子是通用方法。它可以从任何地方调用(只要编译器可以找到它)并且不需要任何对象的实例。如果你使用过CGPointMake(x,y)之类的方法,那么这些方法就被设置为通用(C风格)方法。
someFunction(4,5);
第二种类型是实例方法。它只在一个类中定义,而 - 在开头意味着你必须有一个这个类的实例来调用该方法。所以
Foo *myFoo = [[Foo alloc] init];
[myFoo someFunction:4 someParam:5];
我倾向于将第一种样式用于不一定属于一个类或另一个类的简单实用方法,例如数学或点操作方法。你的大多数方法应该是实例方法,但这是一个更长的答案(面向对象的设计)。