如何在objectivec

时间:2017-06-03 18:06:42

标签: objective-c pointers methods block

  1. 我输入一个如下所示的块

    typedef void(^cbGeneric)();
    
  2. 我在类

    中使用块定义属性
    @property(nonatomic, strong)cbGeneric batchLoadStartedEvent;
    
  3. 我需要将类的成员方法地址绑定到此属性。

  4. 如何获取类成员方法的指针并将其分配给块属性?感谢

2 个答案:

答案 0 :(得分:3)

  

我需要将类的成员方法地址绑定到此属性。

目前尚不清楚你在这之后是什么。无论您是要调用还是实例或类方法,都需要传递两个隐式参数:self的值和类型SEL的值。你没有提到这些。

我怀疑你要做的是为属性分配一个块值,它将调用某个方法,传递所需的任何参数。在这种情况下,只需指定一个块值,如:

obj.batchLoadStartedEvent = ^{ [someObject someMethod]; };

obj引用要设置其属性的对象,[someObject someMethod]是您希望调用的任何方法,无论对象或类是什么,并包含您希望传递的任何参数。

HTH

答案 1 :(得分:2)

例如,您可以使用class_getMethodImplementation()获取成员方法地址。但这没有用,因为你不能将一个方法实现(基本上是一个函数)分配给一个块var。这是因为块不仅仅是函数变量,而是闭包。并且闭包具有创建上下文,方法具有对象上下文。那不一样。

但是,有一些选项可以获得,你可能想要得到的东西:

使用类型为IMP的方法实现var,而不是使用块var。如果您执行该方法,请记住按方法的预期传递self指针和selector

您可以拥有一个选择器var,它存储要执行的方法的选择器。它的类型是SEL。然后,您可以使用-performSelector:系列的一种方法发送消息。

您可以为当前的ivar分配一个块,除了使用方法选择器发送消息之外别无其他。 (其中"调用"所需的方法。)

如果您提供有关您情况的更多信息,我可以添加更适合您问题的更详细解决方案。