Jum*_*hyn 37 c methods function objective-c
两者有什么区别?如果我正在写一个程序,我什么时候需要这个:
void aFunction() {
//do something
}
Run Code Online (Sandbox Code Playgroud)
我什么时候需要这个:
-(void)aMethod {
//do something else
}
Run Code Online (Sandbox Code Playgroud)
bbu*_*bum 79
实际上,Objective-C方法只是一个C函数,开头时始终存在两个参数.
这个:
-(void)aMethod;
Run Code Online (Sandbox Code Playgroud)
完全等同于:
void function(id self, SEL _cmd);
Run Code Online (Sandbox Code Playgroud)
Objective-C的消息是这样的:
[someObject aMethod];
Run Code Online (Sandbox Code Playgroud)
完全等同于此(几乎 - 有一个超出本答案范围的可变参数ABI问题):
objc_msgSend(someObject, @selector(aMethod));
Run Code Online (Sandbox Code Playgroud)
objc_msgSend()找到方法的适当实现(通过查找someObject)然后,通过尾调用优化的魔力,跳转到方法的实现,为了所有意图和目的,它的工作方式与C函数完全相同看起来像这样的电话:
function(someObject, @selector(aMethod));
Run Code Online (Sandbox Code Playgroud)
从字面上看,Objective-C最初只是作为C预处理器实现的. 您可以在Objective-C中执行的任何操作都可以直接重写.
然而,这样做将是一个完全痛苦的屁股,并不值得花时间超越这种令人难以置信的教育经验.
通常,在使用直接C goop时,在与对象和函数交谈时使用Objective-C方法.鉴于几乎所有的Mac OS X和iOS都提供了Objective-C API - 对于UI级别的编程入口点来说当然也是如此 - 那么你大多数时候都会使用Obj-C.
即使在编写相对独立的模型级代码时,您通常也会使用Objective-C,因为它在状态/数据和功能之间提供了非常自然的粘合,这是面向对象编程的基本租户.
在Objective-C中,每个函数都在一个对象上运行,比如
[myObject myFunction]
AC方法的形式如下:
return-type function-name(argument1, argument2, etc) {}
Objective-C 实例方法具有以下形式:
-(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)
| 归档时间: |
|
| 查看次数: |
18455 次 |
| 最近记录: |