Objective C: 两个隐式参数传递给对象调用的每个方法

Objective C: Two implicit parameters passed to every method called by an object

Objective-c中对象传递给每个方法的两个隐式参数是什么?是_cmd和id吗?

这是个好问题, 简短的回答是: 是的,隐式传递了两个参数。 self 类型 id,以及 _cmd 类型 SEL .

为了更好地理解它,下面是方法调用背后发生的事情。

@interface Item:NSObject
-(void)dummyMethod;
@end
@implementation Item
-(void)dummyMethod{
     NSLog(@"dummyPrint");
}
@end

一个正常的方法调用是这样的:

Item* objectOne = [[Item alloc]init;
[objectOne dummyMethod];

那个电话 translated/complied 到:

objc_msgSend(objectOne,@selector(dummyMethod)); //since the dummy method takes no parameters and returns void

自己尝试it/use。 1. #import<objc/message.h 2. 在使用之前将 objc_msgSend 方法转换为适当的函数指针类型,就像那样。

void (*objc_msgSendPointer)(id self, SEL _cmd) = (void*)objc_msgSend;
objc_msgSendPointer(one, @selector(dummyMethod)); 

这里是函数声明

 id objc_msgSend(id self, SEL op, ...);

查看此文档以获取更多信息.. objc_msgSend. 另请查看此主题 using objc_msgSend to call a Objective C function with named arguments 有关其他方法的更多信息,特别是 Ken 的回答。

希望对您有所帮助!