iOS / Cocoa: использование URL-адреса в качестве ключа в NSDictionary - PullRequest
1 голос
/ 23 апреля 2011

Для приложения, над которым я работаю, у меня есть класс, который обрабатывает запросы, отправленные веб-службе.Чтобы снизить нагрузку на трафик, я хочу кешировать большинство запросов и их результатов (по крайней мере, для контента, который будет меняться не часто).Запрос уникально идентифицируется по используемому URL, поэтому я хочу использовать URL в качестве ключа.

В предыдущем проекте, над которым я работал, я использовал для создания md5-хэша URL-адреса для использования в качестве ключа.Я начал задумываться над тем, насколько безопасен этот подход, поскольку, по-видимому, вполне вероятно, что два разных URL-адреса выдают одно и то же хешированное значение.

Кто-нибудь может предложить более безопасный подход, или я все еще должен придерживаться md5-хэшей URL-адреса, чтобы они выполняли функцию ключа в моем словаре кэша?

Ответы [ 2 ]

2 голосов
/ 23 апреля 2011

Просто используйте NSMutableDictionary с URL-адресами (как NSString s) для словарных ключей.NSDictionaryNSMutableDictionary) почти наверняка реализованы с некоторой хеш-таблицей внутри, но они позаботятся о любых проблемах с дублированием хеша.Если вы дадите ему уникальный ключ, он будет правильно его хранить.

Если вы не уверены, что NSMutableDictionary слишком медленный для ваших нужд (а это почти наверняка не произойдет), вы не сможетенужно беспокоиться о хешировании, столкновениях или чем-то подобном.Просто вставьте данные в свой словарь с уникальным ключом (URL).

0 голосов
/ 23 апреля 2011

Прежде всего я предлагаю взглянуть на главу Understanding Cache Access в Руководстве по программированию системы загрузки URL.

Если этого недостаточно, я бы использовал md5 в качестве ключа. Я не думаю, что вы подвергаете какую-либо уязвимость вашего приложения потенциальным злоумышленникам. Как может быть причинен вред?

...