2

我一直在使用运行时,并想出了一个替代 objc_allocateClassPair / objc_registerClassPair 的方法来生成匿名类。

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

更一般地说,运行时是开源的这一事实似乎为该语言开辟了一定的创造力潜力......

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

还对这可能如何影响 App Store 批准感兴趣。

4

1 回答 1

4

很可能,最终麻烦多于其价值。当然,您不想替换系统框架使用的运行时。这不仅可能不可能(或者肯定非常困难),而且很可能会使您的应用程序慢得难以忍受,因为有许多只能在系统级别完成的优化。

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

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

如果你真的想要一个新的/不同的运行时模型用于类中的某些功能子集,最好尽可能将其与系统运行时隔离。一个新的根类可能很有趣,但任何与框架类的混合都可能充满脆弱性。

于 2011-02-13T18:43:27.907 回答