Я использовал собственный NSURLProtocol в моем приложении для обнаружения ресурсов и загрузки из каталога кэша, если он доступен, или для перенаправления обратно на сервер моего приложения. Однако я считаю, что документации по абстрактным методам не хватает, и я не уверен, что делать с некоторыми из абстрактных методов, которые мы должны реализовать.
Мы должны реализовать:
+ (BOOL)canInitWithRequest:(NSURLRequest *)request
+ (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request
- (void)startLoading
- (void)stopLoading
canInitWithRequest
просто, вот как вы сообщаете NSURLProtocol, что ответите на этот запрос.
Понятия не имею, что делать с canonicalRequestForRequest:
.
В startLoading:
я либо создавал свой ответ из локального файла, либо синхронно извлекал удаленный файл, а затем вызывал методы client
:
[self.client URLProtocol:self didReceiveResponse:response cacheStoragePolicy:NSURLCacheStorageAllowed];
[self.client URLProtocol:self didLoadData:responseData];
[self.client URLProtocolDidFinishLoading:self];
Мне неясно, нужно ли мне вызывать метод протокола клиента:
- (void)URLProtocol:(NSURLProtocol *)protocol wasRedirectedToRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse
Когда я решаю извлечь ресурс с удаленного сервера (когда он еще не был кэширован).
Наконец, я еще не понял, что делать с stopLoading:
Если кто-то знает больше о том, что эти методы должны делать, ваши идеи очень ценятся.