我输入一个如下所示的块
typedef void(^cbGeneric)();
我在类
中使用块定义属性@property(nonatomic, strong)cbGeneric batchLoadStartedEvent;
我需要将类的成员方法地址绑定到此属性。
如何获取类成员方法的指针并将其分配给块属性?感谢
答案 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分配一个块,除了使用方法选择器发送消息之外别无其他。 (其中"调用"所需的方法。)
如果您提供有关您情况的更多信息,我可以添加更适合您问题的更详细解决方案。