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类的实例方法。 所以我想如果你真的在写课程的话你会需要第二个版本的。