建立一个进口从一个目标-C块
题
的 IMP
类型在目标C表示功能的指针,因为到目前为止,我以理解的。是否有任何方法来做一个 IMP
从一个方框指针?谢谢你的想法。
解决方案
由于这是书面还是现在API在iOS和Mac OS X,允许块变成小鬼。我写了一个 志后 描述API(imp_implementationWithBlock()).
一块是有效的结构,包含一点点的元数据,参照编码包含在块和一份const-复制的数据的捕获在块。
因此,没有,有没有办法直接地图之间的一个 IMP
和一块参考。
当叫到一块的汇编、编译器发射的一个蹦床,设立堆框架,然后跳到的可执行代码内。
你可以做什么,不过,是创建一个小鬼就像是蹦床。以下,你会需要一个特定进口的每个设定的参数和返回的类型被称为。如果你需要作出这种通用的,则需要使用大会。
为此,我设立了独特的方框中的实例每类实例。如果你想有一个通用框行为在所有情况下,建立一个哈希 SEL
->的框每类。
(1)准块作为IMPs使用相关的参考机构。是这样的:
void (^implementingBlock)(id s, SEL _c, int v) = ^(id s, SEL _c, int v) {
// do something here
}
objc_setAssociatedObject(obj, SELToImp, [implementingBlock copy]));
(2)实施一个蹦床进口这样的事情:
void void_id_sel_intTramp(id self, SEL _cmd, int value) {
int (^block)(id s, SEL _c, int v) = objc_getAssociatedObject(self, _cmd);
block(self, _cmd, value);
}
(3)东西上面蹦床在任何选择通过的目标-C runtime的API(见 method_setImplementation
像)
注意事项:
这是输入计算器.真正的代码会相似,但可能略有不同。
该[implementingBlock复制]是至关重要;块开始生活在叠层(通常)
不隶属于 StackOverflow