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 的回答。
希望对您有所帮助!
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 的回答。
希望对您有所帮助!