2011-04-23 6 views
1

私が開発しているアプリケーションの場合WebServiceに送信されるリクエストを扱うクラスがあります。トラフィックの負荷を軽減するために、ほとんどのリクエストとその結果をキャッシュしたい(少なくとも頻繁に変更されないコンテンツについては)。要求は使用されたURLによって一意に識別されるため、URLをキーとして使用したいと考えています。iOS/Cocoa:NSDictionaryでURLをキーとして使用する

前回のプロジェクトでは、キーとして機能するためにURLのmd5ハッシュを作成しました。明らかに、2つの異なるURLが同じハッシュ値を生成する可能性があるので、このアプローチがどれほど安全であるか疑問に思っています。

誰かがより安全なアプローチを提案できますか?または、キャッシュ辞書のキーとして機能するためにURLのmd5ハッシュに固執する必要がありますか?

+0

MD5と "2つの異なるURLが同じハッシュ値を生成するというかなりの変更があるため"本当に?私に例を挙げてください、あなたは宝くじに当選したと思います! –

+2

辞書キーとして 'NSURL'オブジェクトを使用してみませんか? –

+0

どのようにこれらのリクエストをしていますか? ASI?またはNSURLConnections? –

答えて

2

辞書キーのURL(NSStrings)を使用してNSMutableDictionaryを使用してください。 NSDictionary(とNSMutableDictionary)は、内部的に何らかの種類のハッシュテーブルで実装されていますが、ハッシュの重複問題はすべて処理されます。あなたがそれに一意のキーを与えるならば、それはそれを適切に保存します。

NSMutableDictionaryがあなたのニーズにあまりにも遅い(確かにそうではない)ことが確実でない限り、ハッシュや衝突などを心配する必要はありません。一意のキー(URL)を使用して辞書のデータをスティックします。

+0

ええ、私はURLを固執しました。私はちょうど脳を持っていた* ck。ハッシュされたURLを使用する理由はありませんでした。キャッシュされたオブジェクトごとに個別のファイルを使用した場合は、過去のものしか必要ありませんでしたが、現在すべてのオブジェクトが1つのファイルに保存されています。 –

+0

"と辞書キーのURL(NSStringsとして)"なぜですか? 'NSURL'をキーとして直接使用しない理由はありますか? –

+0

@ErikB一つの理由は、 'NSURL'を使って' baseURL'と 'relativeToURL'の異なる組み合わせを使って同じ絶対URLを複数の方法で表現できるということです。私は実際にこのように作成された 'NSURL'が' equal'とみなされているかどうかをチェックしていませんが、その可能性を避けるため、URL正規表現(絶対文字列) –

0

まず、URLローディングシステムプログラミングガイドのUnderstanding Cache Accessの章を参照してください。

これで十分でない場合は、キーとしてmd5を使用します。潜在的な攻撃者にあなたのアプリの脆弱性を公開するとは思わない。どのように害を及ぼすことができますか?

関連する問題