ric*_*h.e 7 url cocoa-touch ios
我一直在我的应用程序中使用自定义NSURLProtocol来检测资源并从缓存目录加载(如果可用),或重定向回我的应用程序的服务器.但是,我发现缺少抽象方法的文档,我不知道如何处理我们需要实现的一些抽象方法.
我们必须实施:
+ (BOOL)canInitWithRequest:(NSURLRequest *)request
+ (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request
- (void)startLoading
- (void)stopLoading
Run Code Online (Sandbox Code Playgroud)
canInitWithRequest 这很简单,这就是你告诉NSURLProtocol你将如何回应这个请求.
我不知道该怎么做canonicalRequestForRequest:.
在startLoading:,我要么从本地文件创建响应,要么同步获取远程文件,然后调用client方法:
[self.client URLProtocol:self didReceiveResponse:response cacheStoragePolicy:NSURLCacheStorageAllowed];
[self.client URLProtocol:self didLoadData:responseData];
[self.client URLProtocolDidFinishLoading:self];
Run Code Online (Sandbox Code Playgroud)
我不清楚是否需要调用客户端协议方法:
- (void)URLProtocol:(NSURLProtocol *)protocol wasRedirectedToRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse
Run Code Online (Sandbox Code Playgroud)
当我决定从远程服务器获取资源时(当它尚未缓存时).
最后,我还没弄清楚该怎么做 stopLoading:
如果有人知道这些方法的更多内容,那么您的见解将非常受欢迎.
canonicalRequestForRequest - 来自文档(https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSURLProtocol_Class/Reference/Reference.html)
"由每个具体的协议实现来定义"规范"的含义.协议应该保证相同的输入请求总是产生相同的规范形式.
在实现此方法时应特别注意,因为请求的规范形式用于查找URL缓存中的对象,该缓存是在NSURLRequest对象之间执行相等性检查的过程.
它只是说:
确保两个有效的URL相同的请求...最终使用完全相同的请求字符串
...如果可用,请求一个将返回另一个的预缓存版本.
您应该可以再次返回请求.您可以通过检查不需要URL编码但是(例如,如果有文字破折号/连字符编码)的字符来对其进行精细化.
wasRedirectedToRequest - 来自文档(https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Protocols/NSURLProtocolClient_Protocol/Reference/Reference.html)
"发送以指示URL加载系统已重定向协议实现.(必需)"
即,如果请求通过HTTP重定向代码(例如30x状态代码)重定向,则只能调用此方法.
注意:在STACKOVERFLOW意思中的错误我无法输入我想要的内容
例如,服务器可能会将"http:// server"重定向到"http:// server/index.html" - 并且此回调允许您通知接收方它将从稍微不同的URL获取响应它要求.
同样,这对于进行正确的缓存等是必要的.
| 归档时间: |
|
| 查看次数: |
2207 次 |
| 最近记录: |