C++的this,Objective-C的self
2014-04-15 22:43
274 查看
C++中定义类的实例方法如下:
C++编译器将该方法作为C语言函数来处理。
MyClass:method方法的实质就是__ZN7MyClass6methodEi函数。“this”作为第一个参数传递进去。该方法的调用如下:
该源代码通过C++编译器转换成C语言函数调用的形式:
即this就是MyClass类(结构体)的实例。
同样,我们也来看一下Objective-C的实例方法:
Objective-C编译器同C++的方法一样,也将该方法作为C语言的函数来处理。
与C++中变换结果的this相同,“self”作为第一个参数被传递过去。以下为调用代码。
如果使用clang的-rewrite-objc选项,则上面源代码会转换为:
objc_msgSend函数根据指定的对象和函数名,从对象持有类的结构体中检索_I_MyObject_method_函数的指针并调用。此时,objc_msgSend函数的第一个参数obj作为_I_MyObject_method_函数的第一个参数self进行传递。同C++一样,self就是MyObject类的对象。
void MyClass::method(int arg) { printf("%p %d\n", this, arg); }
C++编译器将该方法作为C语言函数来处理。
void __ZN7MyClass6methodEi(MyClass *this, int arg) { printf("%ps %d\n", this, arg); }
MyClass:method方法的实质就是__ZN7MyClass6methodEi函数。“this”作为第一个参数传递进去。该方法的调用如下:
MyClass cls; cls.method(10);
该源代码通过C++编译器转换成C语言函数调用的形式:
struct MyClass cls; __ZN7MyClass6methodEi(&cls, 10);
即this就是MyClass类(结构体)的实例。
同样,我们也来看一下Objective-C的实例方法:
-(void)method:(int)arg { NSLog("%p %d\n", self, arg); }
Objective-C编译器同C++的方法一样,也将该方法作为C语言的函数来处理。
void _I_MyObject_method_(struct MyObject *self, SEL _cmd, int arg) { NSLog("%p %d\n", self, arg); }
与C++中变换结果的this相同,“self”作为第一个参数被传递过去。以下为调用代码。
MyOjbect *obj = [[MyObject alloc] init]; [obj method:10];
如果使用clang的-rewrite-objc选项,则上面源代码会转换为:
MyObject *obj = objc_msgSend(objc_getClass("MyObject"), sel_registerName("alloc")); obj = objc_msgSend(obj, sel_registerName("init")); objc_msgSend(obj, sel_registerName("method:"), 10);
objc_msgSend函数根据指定的对象和函数名,从对象持有类的结构体中检索_I_MyObject_method_函数的指针并调用。此时,objc_msgSend函数的第一个参数obj作为_I_MyObject_method_函数的第一个参数self进行传递。同C++一样,self就是MyObject类的对象。
相关文章推荐
- 场景中self其实就相当于Java,C++中的this对象
- Effective C++ Item 10,11 Have assignment operators return a reference to *this Handle assignment to self in operator =
- C++中的this和Python的self对比
- [Objective-C] self 和 this 的区别
- JavaScript的self和this使用小结
- JavaScript的self和this使用小结
- PHP之this和self
- C++基础4 类 const函数 转全局函数 返回*this 数组类。友元 函数 类 操作符重载
- c++中this指针的用法小结
- js中var self=this的解释
- objective-c 的用self和不用引用变量的区别
- Objective-C/C++混编编译器设置
- 浅析C++中的this指针
- PHP this,self 和 parent 关键字
- 刨根问底Objective-C Runtime(1)- Self & Super
- C++在类的成员函数中调用delete this
- Mixing Objective-C, C++ and Objective-C++: an Updated Summary
- Capturing 'self' strongly in this block is likely to lead to a retain cycle
- C++ 类的 this 指针 语法练习4
- C++&&Objective-c