Block - 4
2015-10-20 14:27
483 查看
经过前面几篇的学习我们大概对iOS下的block的理解有所印象,但是实际使用中还是更为复杂一些,下面用AFNetworking平台为例子演示一遍。
1.回调block typedef 声明:
上传照片的方法,回调block作为参数:
而方法里面调用的是AFNetworking的方法也是用了block作为参数:
以上是定义方法,下面是方法使用:
永远记得,block什么时候为参数,什么时候为定义,什么时候为实现就能理解了。
别的都一样,一通百通!
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什么时候为参数,什么时候为定义,什么时候为实现就能理解了。
别的都一样,一通百通!
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- Ruby中Block和迭代器的使用讲解
- Ruby中使用Block、Proc、lambda实现闭包
- Ruby中的block、proc、lambda区别总结
- 讲解iOS开发中基本的定位功能实现
- js判断客户端是iOS还是Android等移动终端的方法
- IOS开发环境windows化攻略
- .net平台推送ios消息的实现方法
- 探讨Android与iOS,我们将何去何从?
- Android、iOS和Windows Phone中的推送技术详解
- IOS 改变键盘颜色代码
- 举例详解iOS开发过程中的沙盒机制与文件
- Android和IOS的浏览器中检测是否安装某个客户端的方法
- javascript实现阻止iOS APP中的链接打开Safari浏览器