以编程方式获取Coco类文件

时间:2016-08-03 13:43:04

标签: objective-c

使用objc/runtime.h我们可以在运行时创建类。如何从运行时创建的类中导出.h.m文件?

3 个答案:

答案 0 :(得分:1)

创建.h在概念上是可行的,但您需要自己编写代码来执行此操作(使用ObjC运行时调用来检查类,然后手动编写文件)。我不知道有谁编写过这段代码,但编写它可能是对ObjC运行时函数的一个很好的介绍。请注意,.h可能不会非常友好。例如,方法签名中的所有对象类型都是id。所以它有点用,但我想不出很多我想要的方法。

在这里创建.m并没有多大意义。运行时生成的类的实现将是一堆到现有函数的IMP指针(它们本身已经是编译代码)。我不知道你期望在.m中得到什么。原则上,您可以扫描可执行文件以找出函数的名称,然后写出.m看起来像:

- (void)someMethod {
    SomeMethod_IMP()
}

这可能会变得非常复杂,而且我可以想象在一般情况下会引起你的几个角落案例。

这通常不是如何使用动态生成的类,在极少数情况下使用它们。它们在KVO中无处不在(但你永远不会想要.h),并且它们的其他用途有点相似:它们通常是现有界面的一些神奇子类,所以你永远不会与它们互动直接(并且它们几乎总是与它们的超类具有相同的API)。你真的想解决什么问题?

答案 1 :(得分:0)

要获得实现,您必须找到或编写一个工具来将程序集转换回Objective-C。

仅生成标题(接口),有可用的工具。使用Google。

答案 2 :(得分:-2)

你不能告诉Objective-C运行时从.h和.m文件创建一个新类,因为它需要一个编译器。您需要对项目中的创建进行硬编码。

  1. 使用objc_allocateClassPair
  2. 创建子类
  3. 使用class_addMethod添加方法(以及带有class_addProperty的属性...)
  4. 然后你可以使用新的类。