我一直在玩运行时,并提出了一个替代objc_allocateClassPair / objc_registerClassPair来生成匿名类。
匿名类对于我正在处理的事情非常方便,但我担心因为它们依赖于运行时的不透明数据类型的实现方式(据我所知,运行时是一个共享库,可能会在OS版本之间更改这些类型的布局)它会遇到麻烦。
更一般地说,运行时是开源的这一事实似乎开启了一定的语言创造潜力...
静态链接到我修改的运行时而不是共享的运行时是多么简单?我是不是要乱用编译器,或者更像是链接到任何其他库。
也对这可能会影响App Store批准感兴趣。
答案 0 :(得分:4)
可能,它最终会比它的价值更麻烦。当然,您不希望替换系统框架使用的运行时。它不仅可能不可能(或者当然非常困难),它也很可能会使您的应用程序难以忍受,因为有许多优化只能在系统级别完成。
这样做可能需要大量的编译器和链接器恶作剧。你也会遇到边界问题;是一个调用站点调用你的代码或调用系统(如果你试图并行运行两个运行时 - 这可能是不可能的)。
在评估中肯定是正确的,即依赖当前运行时中元数据的布局是不行的。所有元数据都被放在Obj-C 2.0过渡中的API之后,专门用于在不破坏[正确编写的]应用程序的情况下显着改变元数据。
如果您真的想为类中的某些功能子集创建新的/不同的运行时模型,最好尽可能地将其与系统运行时隔离开来。一个新的根类可能很有趣,但任何与框架类的混合都可能充满了脆弱性。