Я использую ASIHttpRequests
и ASINetworkQueue
в приложении для iPhone для получения некоторых 100k XML-файлов и большого количества миниатюр от веб-сервиса. Я хотел бы кэшировать запросы в стиле NSURLCache
. ASI, кажется, не поддерживает кэширование, как, и я посмотрел на код, и это спадает до C для создания запросов, таким образом вставляя NSURLCache
слой казался хитрым.
Что лучший способ состоит в том, чтобы реализовать это?
NSURLConnection поддерживает кэширование в стиле NSURLCache и выполняет большую работу за вас «за кулисами». У него даже есть хороший метод делегата, который позволит вам управлять cachedResponse:
- (NSCachedURLResponse *) connection: (NSURLConnection *) connection willCacheResponse: (NSCachedURLResponse *) cachedResponse
Вы можете обеспечить собственное кэширование, прежде чем переходить к ASI-коду.
Оберните свой ASI-код в класс, имеющий метод:
- (NSString *) getContentFor: (NSURL *) url
Этот метод сначала проверяет внутренний NSDictionary, чтобы узнать, есть ли в нем ключ для указанный URL. Если это так, он возвращает объект, хранящийся с ключом.
В противном случае выполняется обычный запрос ASIRequest. Когда запрос получен с сервера, он сохраняет его как строку в вашем словаре с ключом URL-адреса.
Конечно, вам нужно будет осторожно обрабатывать асинхронные запросы и истечение срока действия старых запросов.
Любой, кто спрашивает, как они могут сделать это напрямую с помощью ASIHTTPRequest, может заинтересоваться этой ветвью кода, которая добавляет поддержку этой функции в качестве опции.