0

私はゲーム プロジェクトを開発しており、オブジェクト コンポジション パターンを使用して柔軟性を高めたいと考えています。現在、コンポジットがそのコンポーネントのメソッドを呼び出せるように、メッセージ転送メソッドをオーバーライドしています。

これの唯一の欠点は、 -forwardingTargetForSelector: は、ターゲットが 1 つしかない場合にのみ機能することです。同じセレクターを持つ 2 つのコンポーネントを持つコンポジットがある場合、(はるかに遅い) -forwardInvocation メソッドを使用して、両方のターゲットで NSInvocation を実行する必要があります。

高度な Objective-C とランタイム リファレンスに関する本を何冊か読んだところ、子コンポーネント クラスで IMP を呼び出す実装を動的に作成することで、メッセージを転送できるように思われます。これを行うには、ランタイム メソッド class_addmethod を使用します。

私の質問は、Apple がこれをプライベート API とみなし、App Store の規則に違反していると見なすかどうかを知っている人はいますか? 審査を通過したアプリで class_addmethod を使用した人はいますか?

ストアでメソッドの入れ替えが許可されていないことはよく知られていますが、これはまったく同じことではありません。典型的な例の 1 つは、Appearance API が利用可能になる前に、UINavigationBar で -drawRect: をスウィズリングすることでした。これは、Apple 独自の API をいじるのではなく、独自のオブジェクトにメソッドを追加することになります。

読んでくれてありがとう!

ローレンス

4

1 に答える 1

1

私が読んだことから、機能を変更するためにAppleが提供するクラスをスウィズリングしていない限り、問題はないはずです。Objective-CランタイムはプライベートAPIではないため、これがすべて独自のコードで発生している場合は、これを実行しても問題ありません。

于 2012-07-23T09:47:04.757 に答える