2

私はランタイムで遊んでいて、匿名クラスを生成する objc_allocateClassPair / objc_registerClassPair の代替案を思いつきました。

匿名クラスは、私が取り組んでいる何かにとって非常に便利ですが、ランタイムの不透明なデータ型が実装される方法に依存しているので心配です (私の知る限り、ランタイムは共有ライブラリであり、 OS バージョン間のこれらのタイプのレイアウト) はトラブルを求めます。

より一般的に言えば、ランタイムがオープンソースであるという事実は、言語の創造性に一定の可能性を開くようです...

共有ランタイムではなく、変更したランタイムに静的にリンクするのはどれほど簡単でしょうか? コンパイラをいじる必要がありますか、それとも他のライブラリにリンクするようなものでしょうか。

これが App Store の承認にどのように影響するかも興味があります。

4

1 に答える 1

4

おそらく、それは価値があるよりも最終的には面倒です。確かに、システム フレームワークで使用されているランタイムを置き換えたくはありません。不可能である可能性が高い (または非常に難しい) だけでなく、システム レベルでしか実行できない最適化が多数あるため、アプリが耐えられないほど遅くなる可能性が非常に高くなります。

これを行うには、かなりのコンパイラとリンカーの悪ふざけが必要になる可能性があります。また、境界の問題にも遭遇します。呼び出しサイトは、コードへの呼び出しまたはシステムへの呼び出しです (2 つのランタイムを並行して実行しようとした場合、これはおそらく不可能です)。

現在のランタイムでのメタデータのレイアウトに依存することはできないという評価で、あなたは間違いなく正しいです。すべてのメタデータは、Obj-C 2.0 への移行で API の背後に置かれました。これは、[適切に作成された] アプリケーションを壊すことなくメタデータを大幅に変更できるようにするためです。

クラスの機能のサブセットに新しい/異なるランタイム モデルが本当に必要な場合は、システム ランタイムから可能な限り分離することをお勧めします。新しいルート クラスは興味深いかもしれませんが、フレームワーク クラスとの混合は脆弱性に満ちている可能性があります。

于 2011-02-13T18:43:27.907 に答える