基础知识

关联对象

  • 分类中添加属性
static char loadOperationkey;
typedef NSMapTable> SDOperationDictionary;
- (SDOperationDictionary *)sd_operationDictionary{
  @synchronized(self){
    SDOperationDictionary *operations = objc_getAssociatedObject(self, &loadOperationkey);
  if(operations){
    return operations;
   }
  operations = [[[NSMapTable alloc]init] initWithkeyOptions:NSPointerFunctionsStrongMemory valueOptions:NSPointerFunctionsWeakMemory capacity:0];
  objc_setAssociatedObject(self, &loadOperationkey,operations, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
  return operations;
  }
}

NSMutableURLRequest

NSMutableURLRequest *request = [NSMutableURLRequest alloc] initWithURL:url cachePolicy:(options & SDWebImageDownloaderUseNSURLCache? NSURLRequestUsePortocolCachePolicy : NSURLRequestReloadIgnoringLocalCacheData) timeoutInterval:timeInterval];
  • NSURLRequestUsePortocolCachePolicy
    对特定的URL请求使用网络协议中实现的缓存逻辑,这是默认的策略。该策略表示如果缓存不存在,直接从服务端获取。如果缓存存在,会根据response中的Cache-Control字段判断下一步操作,如: Cache-Control字段为must-revalidata, 则询问服务端该数据是否有更新,无更新话直接返回给用户缓存数据,若已更新,则请求服务端.
  • NSURLRequestReloadIgnoringLocalCacheData
    数据需要从原始地址(一般就是重新从服务器获取)加载。不使用现有缓存.
// 如果设置HTTPShouldHandleCookies为YES,就处理存储在NSHTTPCookieStore中的cookies。
// HTTPShouldHandleCookies表示是否应该给request设置cookie并随request一起发送出去。
request.HTTPShouldHandleCookies = (options & SDWebImageDownloaderHandleCookies);
// HTTPShouldUsePipelining表示receiver(理解为iOS客户端)的下一个信息是否必须等到上一个请求回复才能发送。
// 如果为YES表示可以,NO表示必须等receiver收到先前的回复才能发送下个信息。
request.HTTPShouldUsePipelining = YES;
// 如果你设置了SDWebImageDownloader的headersFilter,就是用你自定义的方法,来设置HTTP的header field。
// 如果没有自定义,就是用SDWebImage提供的HTTPHeaders。
// 简单看下HTTPHeader的初始化部分(如果下载webp图片,需要的header不一样):
// #ifdef SD_WEBP
//         _HTTPHeaders = [@{@"Accept": @"image/webp,image/*;q=0.8"} mutableCopy];
// #else
//         _HTTPHeaders = [@{@"Accept": @"image/*;q=0.8"} mutableCopy];
// #endif
if (wself.headersFilter) {
    request.allHTTPHeaderFields = wself.headersFilter(url, [wself.HTTPHeaders copy]);
}
else {
    request.allHTTPHeaderFields = wself.HTTPHeaders;
}
  • NSURLCredential
//web服务可以在返回http响应时附带认证要求的challenge,作用是询问http请求的发起方是谁,这时发起方应提供正确的用户名和密码(即认证信息),然后 web 服务才会返回真正的 http 响应。
//收到认证要求时,NSURLConnection 的委托对象会收到相应的消息并得到一个 NSURLAuthenticationChallenge 实例。该实例的发送方遵守 NSURLAuthenticationChallengeSender 协议。为了继续收到真实的数据,需要向该发送方向发回一个 NSURLCredential 实例。
[NSURLCredential credentialWithUser:wself.username password:wself.password persistence:NSURLCredentialPersistenceForSession];

你可能感兴趣的:(基础知识)