我一直在使用运行时,并提出了产生匿名类的objc_allocateClassPair / objc_registerClassPair的替代方案。

匿名类对于我正在处理的事情非常方便,但是我担心,由于它们取决于运行时的不透明数据类型的实现方式(据我所知,运行时是一个共享库,可能会更改操作系统版本之间这些类型的布局)会引起麻烦。

更一般而言,运行时是开源的事实似乎为使用该语言创造创造力提供了一定的潜力。

静态链接到修改后的运行时而不是共享运行时,将有多简单?我是否要弄乱编译器,或者更像是链接到任何其他库。

也对这可能会影响App Store批准感兴趣。

最佳答案

最终,这可能会带来更多的麻烦,而不是值得的。当然,您不想替换系统框架正在使用的运行时。这不仅可能(或者肯定非常困难),而且很可能会使您的应用程序运行缓慢,因为有很多优化只能在系统级别进行。

这样做可能需要大量的编译器和链接器恶作剧。您还将遇到边界问题。是一个调用站点,一个调用您的代码或一个系统的调用(如果要尝试并行运行两个运行时,这可能是不可能的)。

在评估中,您绝对正确,因为在当前运行时中依赖元数据的布局是不可行的。在Obj-C 2.0转换中,所有元数据都被放置在API的后面,专门用于允许元数据发生显着更改而不会破坏[正确编写]应用程序。

如果您确实希望为类中的某些功能子集使用新的/不同的运行时模型,则最好尽可能将其与系统运行时隔离。一个新的根类可能很有趣,但是与框架类的任何混合都可能充满脆弱性。

关于iphone - 将应用程序静态链接到我自己的自定义obj-c运行时有多简单?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4984896/

10-12 14:00
查看更多