Block - 4
来源:互联网 发布:linux内核编译步骤 编辑:程序博客网 时间:2024/05/29 15:10
经过前面几篇的学习我们大概对iOS下的block的理解有所印象,但是实际使用中还是更为复杂一些,下面用AFNetworking平台为例子演示一遍。
1.回调block typedef 声明:
typedef void (^CallBack)(id object);
上传照片的方法,回调block作为参数:
-(void)requestUploadAppealImageWith:(NSMutableDictionary *)dic andImageDataDic:(NSMutableDictionary *)dataDic andURL:(NSString *)url andCallBack:(CallBack)callback{ AFHTTPRequestOperationManager* manager = [AFHTTPRequestOperationManager manager]; manager.responseSerializer = [AFHTTPResponseSerializer serializer]; NSData* dData = [dataDic objectForKey:@"D"]; NSData* iData = [dataDic objectForKey:@"I"]; NSData* cData = [dataDic objectForKey:@"C"]; [manager POST:url parameters:dic constructingBodyWithBlock:^(id<AFMultipartFormData> formData){ [formData appendPartWithFileData:dData name:@"D" fileName:@"image.jpg" mimeType:@"multipart/form-data"]; [formData appendPartWithFileData:iData name:@"I" fileName:@"image.jpg" mimeType:@"multipart/form-data"]; [formData appendPartWithFileData:cData name:@"C" fileName:@"image.jpg" mimeType:@"multipart/form-data"]; } success:^(AFHTTPRequestOperation* operation, id responseObject){ callback(responseObject); } failure:^(AFHTTPRequestOperation* operation, NSError* error){ //这里记得一下, "网络异常" 这个NSString类型,下面会明白为什么叫做回调! callback(@"网络异常"); }];}
而方法里面调用的是AFNetworking的方法也是用了block作为参数:
- (AFHTTPRequestOperation *)POST:(NSString *)URLString parameters:(id)parameters constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure{ NSError *serializationError = nil; NSMutableURLRequest *request = [self.requestSerializer multipartFormRequestWithMethod:@"POST" URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString] parameters:parameters constructingBodyWithBlock:block error:&serializationError]; if (serializationError) { if (failure) {#pragma clang diagnostic push#pragma clang diagnostic ignored "-Wgnu" dispatch_async(self.completionQueue ?: dispatch_get_main_queue(), ^{ failure(nil, serializationError); });#pragma clang diagnostic pop } return nil; } AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithRequest:request success:success failure:failure]; [self.operationQueue addOperation:operation]; return operation;}
以上是定义方法,下面是方法使用:
//主线称调用 dispatch_async(dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ //这里block作为参数回调 [[SPHTTPRequest shareSPHTTPRequest] requestUploadAppealImageWith:dict andImageDataDic:imageDic andURL:APPEALIMG_IP andCallBack:^(id object){ <span style="white-space:pre"></span> //这里的判断NSString类型其实就是上面的 "网络错误" , 明白回调了吧! if ([object isKindOfClass:[NSString class]]) { [MBProgressHUD hideAllHUDsForView:self.navigationController.view animated:YES]; [SPCustomAction alertWithMsg:@"网络错误" andTime:1]; } else { self.responseDic = [SPParse parseAppealUpLoadPublicserviceWithData:object]; if ([self.responseDic.flag intValue] == 0) { } else if ([self.responseDic.flag intValue] == 1) { } [MBProgressHUD hideAllHUDsForView:self.navigationController.view animated:YES]; [SPCustomAction alertWithMsg:@"上传成功" andTime:1]; [self.navigationController popToRootViewControllerAnimated:YES]; } }]; });
永远记得,block什么时候为参数,什么时候为定义,什么时候为实现就能理解了。
别的都一样,一通百通!
0 0
- Block - 4
- Block 4:Block实质解析
- Block 4:Block实质解析
- OC 重点block-------4-------block案例1
- iOS Block详解4
- iOS中block(4)
- Block
- block
- Block
- block
- block
- block
- block
- block
- block
- Block
- block
- Block
- 【总结】 2015 ACM-ICPC Asia Changchun Regional Contest
- Go语言zip解压.
- Maven常用命令
- php gbk转拼音
- hicharts 多条曲线图
- Block - 4
- mysql日志介绍
- RSA私钥及公钥生成
- cocos2d-x Tests讲解三:Particle System(粒子系统)
- IC卡与ID卡定义
- 功能测试常见检查点
- BZOJ 2115: [Wc2011] Xor (dfs + gauss 线性基 异或最长路)
- 删除指定链表节点
- Hibernate 配置文件解析