【发布时间】:2018-08-08 10:32:44
【问题描述】:
Objective-c 中的对象传递给每个方法的两个隐式参数是什么?是_cmd和id吗?
【问题讨论】:
标签: objective-c-2.0
Objective-c 中的对象传递给每个方法的两个隐式参数是什么?是_cmd和id吗?
【问题讨论】:
标签: objective-c-2.0
这是个好问题, 简短的回答是: 是的,两个参数被隐式传递。 self 类型为 id,_cmd 类型为 SEL。
为了更好地理解它,下面是方法调用背后发生的事情。
@interface Item:NSObject
-(void)dummyMethod;
@end
@implementation Item
-(void)dummyMethod{
NSLog(@"dummyPrint");
}
@end
一个普通的方法调用应该是这样的:
Item* objectOne = [[Item alloc]init;
[objectOne dummyMethod];
该调用被翻译/遵从:
objc_msgSend(objectOne,@selector(dummyMethod)); //since the dummy method takes no parameters and returns void
自己尝试/使用它。
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 的回答。
希望对你有帮助!
【讨论】: