奇思妙想 · 2024年 4月 22日 0

为什么ObjC的init方法里面可以直接使用self?

29 次浏览

self是ObjC类成员方法的隐藏的第一个参数名,它和C++的隐式this指针是类似作用。可以查看.m文件对应的C代码找到端倪: clang -rewrite-objc demo.m (此处简化以省略必要的ObjC编译选项)

- (id) initWithAge:(int)age {  

    return [self init:age];  

}

对应的C代码如下:

static id _I_Student_initWithAge_(Student * self, SEL _cmd, int age) {

    return ((id (*)(id, SEL, int))(void *)objc_msgSend)((id)self, sel_registerName("init:"), (int)age);

}