C函数与Objective-C方法?

两者有什么区别? 如果我正在编写一个程序,我什么时候需要这个:

void aFunction() { //do something } 

什么时候我需要这个:

 -(void)aMethod { //do something else } 

实际上,Objective-C方法只是一个C函数,一开始就有两个参数。

这个:

 -(void)aMethod; 

完全等同于:

 void function(id self, SEL _cmd); 

Objective-C的消息传递是这样的:

 [someObject aMethod]; 

与此完全等价(几乎 – 这个答案的范围之外有一个可变参数ABI问题):

 objc_msgSend(someObject, @selector(aMethod)); 

objc_msgSend()find方法的适当实现(通过在someObject上查找),然后通过尾调用优化的魔法跳转到实现方法,该方法对于所有的意图和目的,完全像C函数调用,看起来像这样:

 function(someObject, @selector(aMethod)); 

从字面上看,Objective-C最初只是C预处理器而已。 在Objective-C中你可以做的任何事情都可以改写成直的C.

然而,这样做会是一个完全痛苦的屁股,除了这样做的令人难以置信的教育经验,不值得你的时间。


一般来说,当使用直接C语言处理对象时,使用Objective-C方法和函数。 鉴于几乎所有的Mac OS X和iOS都提供了Objective-C API–对于UI级别的编程入口点来说肯定是如此 – 那么大部分时间你都会使用Obj-C。

即使编写相对独立的模型级代码,通常也会使用Objective-C,因为它在状态/数据和function(面向对象编程的基本租户)之间提供了非常自然的粘合。

在Objective-C中,每个函数都在一个对象上运行 ,比如

[myObject myFunction]

AC方法的forms是:

return-type function-name(argument1, argument2, etc) {}

Objective-C 实例方法的forms如下:

-(return-type)function-name:argument1 {}

或者用于多参数函数

-(return-type)function-name:argument1 function-name:argument2 {}

我总是在Obj-C编程中使用Objective-C风格的方法,即使你仍然可以使用C型函数。

我想在C [myObject myMethod:arg]的等价物可能是myObject.myMethod(arg)

首先是独立function。 第二个是Objective-C类的实例方法。 所以我想如果你真的在写课程的话你会需要第二个版本的。