【问题标题】:Objective C: Two implicit parameters passed to every method called by an objectObjective C:传递给对象调用的每个方法的两个隐式参数
【发布时间】:2018-08-08 10:32:44
【问题描述】:

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

【问题讨论】:

    标签: objective-c-2.0


    【解决方案1】:

    这是个好问题, 简短的回答是: 是的,两个参数被隐式传递。 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 的回答。

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 2016-05-22
      • 2013-07-24
      • 1970-01-01
      • 2021-01-23
      • 1970-01-01
      • 2011-09-13
      • 2012-08-13
      • 2018-12-16
      • 1970-01-01
      相关资源
      最近更新 更多