- 浏览: 86960 次
- 性别:
- 来自: 成都
最新评论
转自: http://www.tuicool.com/articles/JFRfmq
//
// HttpRequest.h
// UseBlockCallBack
//
// Created by Michael on 2/13/14.
// Copyright (c) 2014 EIMS. All rights reserved.
//
#import <Foundation/Foundation.h>
typedef void (^FinishBlock)(NSString *dataString);
@interface HttpRequest : NSObject<NSURLConnectionDataDelegate>
@property (strong, nonatomic) NSMutableData *resultData;
@property (strong, nonatomic) FinishBlock finishBlock;
+ (void)postRequestWithURL:(NSString *)urlStr
paramters:(NSString *)paramters
finshedBlock:(FinishBlock)block;
@end
-----------------------------------------------------------------------
//
// HttpRequest.m
// UseBlockCallBack
//
// Created by Michael on 2/13/14.
// Copyright (c) 2014 EIMS. All rights reserved.
//
#import "HttpRequest.h"
@implementation HttpRequest
+ (void)postRequestWithURL:(NSString *)urlStr
paramters:(NSString *)paramters
finshedBlock:(FinishBlock)block
{
HttpRequest *httpRequest = [[HttpRequest alloc]init];
httpRequest.finishBlock = block;
NSURL *url = [NSURL URLWithString:urlStr];
NSMutableURLRequest *requset = [[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30];
[requset setHTTPBody:[paramters dataUsingEncoding:NSUTF8StringEncoding]];
NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:requset delegate:httpRequest];
NSLog(connection ? @"连接创建成功" : @"连接创建失败");
}
/**
* 接收到服务器回应的时回调
*/
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
if (!self.resultData) {
self.resultData = [[NSMutableData alloc]init];
} else {
[self.resultData setLength:0];
}
if ([response respondsToSelector:@selector(allHeaderFields)]) {
NSDictionary *dic = [httpResponse allHeaderFields];
NSLog(@"[network]allHeaderFields:%@",[dic description]);
}
}
/**
* 接收到服务器传输数据的时候调用,此方法根据数据大小执行若干次
*/
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[self.resultData appendData:data];
}
/**
* 数据传完之后调用此方法
*/
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSString *resultStr = [[NSString alloc]initWithData:self.resultData
encoding:NSUTF8StringEncoding];
if (self.finishBlock) {
self.finishBlock(resultStr);
}
}
/**
* 网络请求过程中,出现任何错误(断网,连接超时等)会进入此方法
*/
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
NSLog(@"network error : %@", [error localizedDescription]);
if (self.finishBlock) {
self.finishBlock(nil);
}
}
@end
-----------------------------------------------------------------------
[HttpRequest postRequestWithURL:@"http://www.baidu.com"
paramters:@""
finshedBlock:^(NSString *dataString) {
NSLog(@"finish callback block, result: %@", dataString);
}];
//
// HttpRequest.h
// UseBlockCallBack
//
// Created by Michael on 2/13/14.
// Copyright (c) 2014 EIMS. All rights reserved.
//
#import <Foundation/Foundation.h>
typedef void (^FinishBlock)(NSString *dataString);
@interface HttpRequest : NSObject<NSURLConnectionDataDelegate>
@property (strong, nonatomic) NSMutableData *resultData;
@property (strong, nonatomic) FinishBlock finishBlock;
+ (void)postRequestWithURL:(NSString *)urlStr
paramters:(NSString *)paramters
finshedBlock:(FinishBlock)block;
@end
-----------------------------------------------------------------------
//
// HttpRequest.m
// UseBlockCallBack
//
// Created by Michael on 2/13/14.
// Copyright (c) 2014 EIMS. All rights reserved.
//
#import "HttpRequest.h"
@implementation HttpRequest
+ (void)postRequestWithURL:(NSString *)urlStr
paramters:(NSString *)paramters
finshedBlock:(FinishBlock)block
{
HttpRequest *httpRequest = [[HttpRequest alloc]init];
httpRequest.finishBlock = block;
NSURL *url = [NSURL URLWithString:urlStr];
NSMutableURLRequest *requset = [[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30];
[requset setHTTPBody:[paramters dataUsingEncoding:NSUTF8StringEncoding]];
NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:requset delegate:httpRequest];
NSLog(connection ? @"连接创建成功" : @"连接创建失败");
}
/**
* 接收到服务器回应的时回调
*/
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
if (!self.resultData) {
self.resultData = [[NSMutableData alloc]init];
} else {
[self.resultData setLength:0];
}
if ([response respondsToSelector:@selector(allHeaderFields)]) {
NSDictionary *dic = [httpResponse allHeaderFields];
NSLog(@"[network]allHeaderFields:%@",[dic description]);
}
}
/**
* 接收到服务器传输数据的时候调用,此方法根据数据大小执行若干次
*/
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[self.resultData appendData:data];
}
/**
* 数据传完之后调用此方法
*/
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSString *resultStr = [[NSString alloc]initWithData:self.resultData
encoding:NSUTF8StringEncoding];
if (self.finishBlock) {
self.finishBlock(resultStr);
}
}
/**
* 网络请求过程中,出现任何错误(断网,连接超时等)会进入此方法
*/
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
NSLog(@"network error : %@", [error localizedDescription]);
if (self.finishBlock) {
self.finishBlock(nil);
}
}
@end
-----------------------------------------------------------------------
[HttpRequest postRequestWithURL:@"http://www.baidu.com"
paramters:@""
finshedBlock:^(NSString *dataString) {
NSLog(@"finish callback block, result: %@", dataString);
}];
发表评论
-
block语法
2015-12-11 10:34 536How Do I Declare A Block in Obj ... -
禁止WebView长按事件
2015-11-04 16:05 1182在webViewDidFinishLoad调用: - (voi ... -
一个公共的TableView,然后不会为每个TableView加delegate和datasource
2015-10-27 10:46 997.h // // PublicTableView.h // ... -
记录一些不错的文章
2015-10-09 20:04 613好久没有写ios了,这篇文章主要是记录一些看到的不错的文章: ... -
封装录音View
2015-06-26 16:13 617使用方法: 直接把XHRecrodView添加到control ... -
AFNetWorking请求WebService
2015-06-15 17:22 823.h #import <Foundation/Foun ... -
压缩图片,如果图片大于100kb,就循环压缩
2015-06-02 10:37 2283// 压缩图片,如果图片大于100kb,就循环压缩 + (NS ... -
weakSelf
2015-05-11 14:44 558快速的定义一个weakSelf 当然是用于block里面啦 ... -
UINavigationItem 位置问题
2015-05-06 14:09 1028解决ios7 UINavigationItem 位置偏移问题 ... -
ios Icon及启动图集合
2015-05-04 09:13 684做icon和启动图按这个尺寸来 -
把图片压缩到指定大小(kb)
2015-01-19 16:32 5085UIImage *image=[UIImage imageNa ... -
获取当前时间属于该月的第几周
2015-01-06 15:04 1113+(NSInteger) indexWeekOfDateInM ... -
iOS开发的一些奇巧淫技
2014-12-31 11:13 768iOS开发的一些奇巧淫技 http://www.coco ... -
ios程序异常crash捕获与拦截
2014-06-06 22:09 589转:http://www.sharejs.com/codes/ ... -
设置TabBar选中与未选中图片
2014-04-29 18:07 716-(void)settingTabbarController{ ... -
自定义的NavigationBar,我觉得还不错
2014-04-28 18:03 595地址1:http://code.cocoachina.com ... -
UITableView点击展开cell
2014-04-25 15:14 103861.定义控制cell的两个变量 //最近打开的ind ... -
分享一个非常好的东西
2014-04-09 17:44 720http://makeappicon.com/ 传一个10 ... -
IOS 基于APNS消息推送原理与实现(JAVA后台)
2014-04-09 17:30 992转:http://cshbbrain.iteye.com/bl ... -
ios开发申请发布证书和发布应用到app store
2014-03-21 11:03 7821.http://www.360doc.com/content ...
相关推荐
总之,"IOS block回调代码实例Demo"是一个很好的学习资源,它展示了如何在iOS应用中使用Block进行回调,这对于理解和掌握iOS开发中的异步编程至关重要。通过深入研究这个Demo,开发者可以更好地运用Block来优化代码...
在iOS开发中,我们经常使用Block作为回调机制,特别是在处理网络请求、动画效果或异步任务时。比如,当我们使用`NSURLSession`进行网络请求时,可以设定一个completion handler(完成处理器),这是一个Block,当...
"ios-block 回调.zip"中的"CallbackDemo"很可能是展示了一个关于如何在iOS应用中使用Block进行回调的实例。 Block的基本结构由`^`符号开启,后面跟着返回类型(如果有的话),接着是参数列表,最后用`{}`包裹实现的...
1. **网络请求回调**:可能使用了NSURLSession或AFNetworking等库,通过设置一个Block来处理网络请求的成功或失败情况,接收返回的数据。 2. **GCD(Grand Central Dispatch)的使用**:可能使用dispatch_async或...
- 在网络请求中,Block常用来处理请求的完成回调,例如AFNetworking库的`GET`和`POST`方法。 - 通过设置success和failure Block,我们可以在请求成功或失败时执行相应的代码逻辑,实现异步处理网络数据。 7. **...
总之,`ios-Scrollview 滚动选择菜单block回调.zip`示例教会了我们如何利用`UIScrollView`创建一个可滚动的菜单,并通过Block实现回调机制,这在iOS应用开发中是一个常见的需求。通过深入理解并实践这一技术,开发者...
在“BlockTest”项目中,我们可能遇到的问题是如何正确地将参数传递给Block并在回调中使用。以下是一些注意事项: 1. 引用类型:如果Block内部需要修改外部变量,必须确保该变量是强引用(__strong)或者使用弱引用...
在iOS中,我们经常在网络请求、动画等异步操作中看到块的使用。 下面我们将详细探讨如何使用块回调来替代代理模式: 1. **定义Block类型** 首先,我们需要定义一个Block类型,它将代表我们的回调。例如,我们可以...
Block在回调中非常方便,因为它可以直接在定义回调的地方编写执行逻辑,使得代码更加紧凑和易读。例如,我们在网络请求中可以使用Block来处理成功或失败的情况,使得异步编程更加直观。 Block可以捕获和存储其定义...
在Objective-C或Swift中,Block通常用于回调,例如网络请求、定时器或者GCD(Grand Central Dispatch)中。例如,当我们使用AFNetworking进行网络请求时,可以设置一个Block来处理响应数据: ```objc ...
本项目"ios-网络请求封装.zip"旨在提供一种高效、便捷的网络请求解决方案,通过创建一个网络数据工具,来统一管理并简化项目中的网络请求操作。下面将详细介绍这个网络请求封装的过程以及相关知识点。 首先,我们要...
这里,`requestCameraPermission`方法接收一个Block作为参数,Block中会回调权限请求的结果,`granted`表示用户是否授予了权限。 其次,`EasyPermission`支持多种权限的请求,包括但不限于: - `requestCamera...
本项目"ios-封装GET、POST请求(基于AFNetworking).zip"就是针对AFNetworking进行二次封装,简化了GET和POST请求的使用方式,使得开发者能够更加高效地进行网络编程。 首先,我们来看一下AFNetworking的核心组件。...
例如,在网络请求中,我们可能在回调Block中处理接收到的数据: ```objc [AFNetworking GET:@"https://example.com/data" parameters:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable response...
在iOS开发中,进行HTTP网络请求是不可或缺的一部分,而AFNetworking是目前最流行、最广泛使用的网络库之一。本文将详细介绍如何使用AFNetworking进行HTTP网络请求,并深入探讨其核心概念和使用方法。 AFNetworking...
在实际开发中,Block常用于简单的回调和异步处理,如网络请求的完成回调;代理则适用于复杂的组件交互,如UITableView的数据源和代理方法。理解并熟练运用这两种机制,能帮助开发者写出更加高效、灵活的代码。通过...
使用completionHandler或者block来处理回调结果。 4. **数据任务(Data Tasks)**: URLSession的dataTask用于获取服务器返回的数据,通常用于获取JSON或XML等格式的响应。 5. **下载任务(Download Tasks)**: ...
- "BlockDemo"这个文件很可能是包含一个Block的简单示例代码,可能展示了如何定义Block,如何捕获变量,以及如何在其他函数或方法中使用Block进行回调。 总结来说,Block是iOS开发中的重要组成部分,它提供了灵活...
AFNetworking的API设计简洁明了,支持Block回调,使得网络请求处理更加直观。 **YBNetwork封装框架特性** 1. **简单易用**:YBNetwork将AFNetworking的复杂API进行了封装,提供更简单的接口,使得开发者可以快速...
在IT行业中,网络请求是应用程序与服务器之间进行数据交换的关键技术。为了简化这一过程,开发者通常会使用第三方网络请求框架,这些框架提供了便捷、高效且易于使用的API来处理HTTP请求。本篇将深入探讨三个知名的...