使用隐藏的参数
当objc_msgSend 找到方法对应的实现时,它将直接调用该方法实现,并将消息中所有的参数都传递给方法实现,同时,它还将传递两个隐藏的参数:
这些参数帮助方法实现获得了消息表达式的信息。它们被认为是”隐藏“的是因为它们并没有在定义方法的源代码中声明,而是在代码编译时是插入方法的实现中的。
尽管这些参数没有被显示声明,但在源代码中仍然可以引用它们(就象可以引用消息接收者对象的实例变量一样)。在方法中可以通过self 来引用消息接收者对象,通过选标_cmd 来引用方法本身。在下面的例子中,_cmd 指的是strange 方法,self 指的收到strange 消息的对象。
- strange
|
{
|
id target = getTheReceiver();
|
SEL method = getTheMethod();
|
|
if ( target == self || method == _cmd )
|
return nil;
|
return [target performSelector:method];
|
}
|
在这两个参数中,self 更有用一些。实际上,它是在方法实现中访问消息接收者对象的实例变量的途径。
|
请发表评论