1

私のアプリケーションでは、いくつかの HTTP リクエストを行う必要があります。これらのすべての要求は、解析する必要がある XML ドキュメントを返し、テーブル ビューなどに移動します。アプリケーション全体で約 10 ~ 20 個のドキュメントです。同じ名前の属性が異なるドキュメントで発生する可能性があるため、デリゲート メソッドでこれらを区別する必要があります。

私のアプローチは、NSXMLParserDelegate メソッドを持つ 1 つのクラスのみを持ち、ドキュメントごとに異なるパーサーを使用し (ただし、同じデリゲートを使用)、デリゲート メソッドのパーサー引数を使用してパーサー (別名ドキュメント) を区別することでした。しかし、これは非常に複雑になってきており、大量の異なるパーサー インスタンス変数と if 句で終わることは望ましくありません。これを行う簡単な方法はありませんか?解析操作ごとに 1 つのクラス (=> 異なるデリゲート) を持つことを考えましたが、それはさらに悪いことだと思います..

4

2 に答える 2

2

1つのオプションは、特定のxmlタイプの解析から作成されるオブジェクトにXMLデリゲートコールバックやデータ構築メソッドを配置することです。これにより、オブジェクトの定義と、xmlまたはデータチャンクからオブジェクトを作成する方法の知識が1か所に配置されます。すべてのタイプのすべての解析ロジックを1つのデリゲートメソッドに配置しようとすると、1つのデリゲートクラスが複雑になり、作業している各タイプの知識が分割されます。

このアプローチの1つの課題は、複合オブジェクトです。たとえば、アーティストオブジェクト、アーティストを含むアルバムオブジェクト、およびアーティストのリストを取得する呼び出しがあるとします。そこにある1つのアプローチは、解析している複合オブジェクトを他のオブジェクトクラスに延期させることです(おそらく独自のプロトコルを使用します)。たとえば、アルバムオブジェクトは解析中であり、「アーティスト」要素にヒットします。したがって、アーティストを割り当てることを認識しており、デリゲートコールバックからデータチャンクにヒットすると(アーティスト要素にヒットするまで)、データを詰め込むプロトコルメソッドを呼び出し続けます。これにより、そのチャンクをどう処理するかについての知識が遅れます。そのオブジェクトを定義するクラスへのデータの。アーティストのリストを処理しているクラスの場合、これをn回実行してリストを作成します。

最後に、XMLが解析されるときにオブジェクトを構築すると、正しく実行された場合、メモリを低く抑えてパフォーマンスを向上させることができます。対照的に、完全なxml文字列をバッファリングする場合、完全なXML DOMを作成すると、より多くのメモリを使用する可能性があり、ユーザーにとっても遅くなる可能性があります。したがって、パフォーマンスも考慮してください。

于 2012-09-08T15:53:31.110 に答える