4

在做objective-c时,我是否必须写出如下函数:

- (int) someFunction: (int) a someParam: (int) b;

或者我可以使用常规的 C 风格:

void someFunction(int a, int b);

如果我可以做 C 风格,那么用 Objective-C 风格做有什么好处吗?

4

4 回答 4

9

如果你愿意,你可以使用常规的 C 函数,因为 Objective-C 只是 C 的超集。

如果你想使用 Objective-C 的特性,比如类、消息、继承等,你需要使用 Objective-C 语法,当然还要使用 Cocoa/CocoaTouch SDK。

您可以在文件中混合使用 Objective-C 和 C 代码,并让 Objective-C 方法调用纯 C 函数。objc_msgSend您还可以通过直接访问Objective-C 运行时层(例如,使用函数)从纯C 函数调用Objective-C 方法。

于 2012-09-13T10:30:11.673 回答
9

这不是 Objective-C 函数,而是一种方法。它可以访问实例的变量和其他方法。两者不等价。在大多数情况下,您应该使用 Objective-C 方法。为什么要使用 C 函数?你想做什么?

于 2012-09-13T10:30:40.037 回答
1

第一条语句是方法声明,第二条语句是函数。它们是完全不相关的两件事。两者都在 Objective-C 中被接受。但是方法声明只能发生在@interface @end. 并且函数声明不能​​发生在两者之间@interface @end

于 2012-09-13T10:31:34.397 回答
0

两者的区别是泛型方法和实例方法的区别。第一个例子是一个泛型方法。它可以从任何地方调用(只要编译器可以找到它)并且不需要任何对象的实例。如果您使用过 CGPointMake(x,y) 之类的方法,这些方法将设置为通用(C 风格)方法。

someFunction(4,5);

第二种是实例方法。它仅在一个类内部定义,开头的 - 表示您必须拥有该类的实例才能调用该方法。所以

Foo *myFoo = [[Foo alloc] init];
[myFoo someFunction:4 someParam:5];

我倾向于将第一种样式用于不一定属于一个类或另一个类的简单实用方法,例如数学或点操作方法。您的大多数方法可能应该是实例方法,但这是一个更长的答案(面向对象的设计)。

于 2013-12-05T17:20:28.753 回答