ios基础知识自己尝试等装一下封装

AFNetworking 3.0封装

2016-03-31  本文已影响1514人  欢欢1206

导语

在上家公司,网络请求一直是AFNetworking2.0,现在该升级了!话不多说,直接开始咱们自己的WebRequest啦!

结构

延续了2.0的习惯,这次封装这采用了简单的二次封装WebRequestManager (负责缓存)WebRequestSession(负责请求),分别进行了GET、POST、Upload(2.0分开写,3.0合并了)、Download

WebRequestSession

WebRequestManager

这里面GET和POST需缓存,这里以GET为例,详细看demo

// 请求数据成功,返回数据
- (void) setReturnSuccessWithSuccess:(void(^)(id dic))success URLString:(NSString *)URLString returnData:(id)dic {

  if ([self.operationCachePool objectForKey:self.webTask]) {
    
    [self.operationCachePool removeObjectForKey:self.webTask];

  }

  NSString *hash = [self.webTask md5String];

  NSString *filePath = [self pathForDocumentWithComponent:hash];

  NSData *data = [[Transformer sharedTransformer] returnDataWithDictionary:dic];

  [data writeToFile:filePath atomically:YES];

  if (success) {
    
    success(dic);
  }

  [self.operationCachePool removeObjectForKey:URLString];

  }

// 请求数据失败,有缓存取缓存,没缓存返回error
- (void)BlockWith:(NSError*)error success:(void(^)(id dic))success failure:(void(^)(NSError *error))failure {

  if (self.isCanceled) {
    
    self.isCanceled = NO;
    
    if (failure) {
        
        failure(error);
    }
    
  }else{
    
    NSLog(@"%@",self.webTask);
    
    NSString *hash = [self.webTask md5String];
    
    NSString *filePath = [self pathForDocumentWithComponent:hash];
    
    NSLog(@"%@",filePath);
    
    NSDictionary *dic = [[Transformer sharedTransformer] returnDictionaryWithDataPath:filePath];
    
    if(dic){
        
        NSLog(@"%@",dic);
        
        if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
            
            if (success) {
                
                success(dic);
            }
            
            NSLog(@"网络不畅,缓存中取~~~~~~~~");
        }
        
    }else {
        
        NSLog(@"%@~~~",dic);
        
        if (failure) {
            
            failure(error);
        }
    }
  }    
  }

// 获取沙盒路径
- (NSString *)pathForDocumentWithComponent:(NSString *)fid {

   NSString *fullPath = nil;

  if (fid&& [fid length]) {
    
    NSString *path = NSHomeDirectory();
    
    NSString *cacheDiretory= [path stringByAppendingPathComponent:@"Library/Caches/"];
    
    cacheDiretory = [cacheDiretory stringByAppendingPathComponent:@"webCache"];
    
    fullPath = [cacheDiretory stringByAppendingPathComponent:fid];
    
  } else {
    
    fullPath = kWebCachePath;
    
  }

  NSFileManager *fileManager = [NSFileManager defaultManager];

  if (![fileManager fileExistsAtPath:fullPath]) {
    
    NSError *err=nil;
    
    if ([fileManager createDirectoryAtPath:fullPath withIntermediateDirectories:YES attributes:nil error:&err]) {
        
        return [fullPath stringByAppendingPathComponent:fid];
        
    }else{
        
        [fileManager createDirectoryAtPath:fullPath withIntermediateDirectories:YES attributes:nil error:&err];
        
        return [fullPath stringByAppendingPathComponent:fid];
      }
  }

  fullPath = [fullPath stringByAppendingPathComponent:fid];

  return fullPath;

  }

// 获取当前时间
- (NSString*)getDate {

  NSDate* now = [NSDate date];

  NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 

  [dateFormatter setDateFormat:@"yyyy/MM/dd  HH:mm:ss"];

  NSLog(@"%@",[dateFormatter stringFromDate:now]);

  return [dateFormatter stringFromDate:now];

  }

效果图

效果图.gif

结束语

新公司注重开源,以后我自己研发的,或者整理的,只要是好东西,我一般都会分享到这的!

上一篇 下一篇

猜你喜欢

热点阅读