代码实现:
RootViewController类的实现:
View Code
// // RootViewController.m // HttpRequestByBlockTest // 方法1:通过块(Block)实现回调-本质是函数指针 // 方法2:通过函数指针实现回调 // Created by hanjun on 13-3-15. // Copyright (c) 2013年 CompanyOfHanJun. All rights reserved. // #import "RootViewController.h" #import "HttpRequst.h" @interface RootViewController () @end @implementation RootViewController void (*pFunc2) (NSData *data); - (void)viewDidLoad { [super viewDidLoad]; [self createControl]; } - (void)createControl{ HttpRequst *request = [[HttpRequst alloc] init]; // [request requestDataFormBlock:^(NSData *data) {//方法1:1.通过块语法向网络类发送函数指针,请求处理 // NSLog(@"backData:%@",data);//方法1:6.得到发送过来的消息,回调结束! // }]; pFunc2 = getData;//方法2:1.让pFunc2函数指针指向getData函数 [request requestDataFromFunctionPointer:pFunc2];//方法2:2.把函数指针传给网络处理类 } //方法2:7.网络类调用该方法,并把消息发送过来,回调结束! void getData(NSData * data){ NSLog(@"backData:%@",data); } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
HttpRequest类的实现:
View Code
#import <Foundation/Foundation.h> @interface HttpRequst : NSObject<NSURLConnectionDataDelegate,NSURLConnectionDelegate>{ NSMutableData *_receiverData; } - (void)requestDataFormBlock:(void (^)(NSData * data))getData; - (void)requestDataFromFunctionPointer:(void (*)(NSData * data))getData; @end
View Code
// // HttpRequst.m // HttpRequestByBlockTest // // Created by hanjun on 13-3-15. // Copyright (c) 2013年 CompanyOfHanJun. All rights reserved. // #import "HttpRequst.h" void (^pFunc1) (NSData *data);//方法1:2.在网络类中定义块的指针 void (*pFunc2) (NSData *data);//方法2:3.在网络类中定义函数的指针 @implementation HttpRequst - (id)init { self = [super init]; if (self) { _receiverData = [[NSMutableData alloc] initWithCapacity:100]; } return self; } //方法1:3.网络类收到请求(包含发信息对象的块-函数指针),开始处理 - (void)requestDataFormBlock:(void (^)(NSData * data))getData{ NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:0 timeoutInterval:30.0]; [NSURLConnection connectionWithRequest:request delegate:self]; pFunc1 = getData;//方法1:4.让我们自定义的指针指向发过来的函数指针 } //方法2:4.网络类收到请求(包含发信息对象的函数指针),开始处理 - (void)requestDataFromFunctionPointer:(void (*)(NSData * data))getData{ NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:0 timeoutInterval:30.0]; [NSURLConnection connectionWithRequest:request delegate:self]; pFunc2 = getData;//方法2:5.让我们自定义的指针指向发过来的函数指针 } - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{ } - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ [_receiverData appendData:data]; } - (void)connectionDidFinishLoading:(NSURLConnection *)connection{ //(pFunc1)(_receiverData);//方法1:5.网络类处理完成,把请求到的数据发送给函数指针的参数 (pFunc2)(_receiverData);//方法2:6.网络类处理完成,把请求到的数据发送给函数指针的参数 } - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{ } @end
块回调步骤:
1.通过块语法向网络类发送函数指针,请求处理;
2.在网络类中定义块的指针;
3.网络类收到请求(包含发信息对象的块-函数指针),开始处理;
4.让我们自定义的指针指向发过来的函数指针;
5.网络类处理完成,把请求到的数据发送给函数指针的参数;
6.得到发送过来的消息,回调结束!
函数指针回调步骤:
1.让pFunc2函数指针指向getData函数;
2.把函数指针传给网络处理类;
3.在网络类中定义函数的指针;
4.网络类收到请求(包含发信息对象的函数指针),开始处理;
5.让我们自定义的指针指向发过来的函数指针;
6.网络类处理完成,把请求到的数据发送给函数指针的参数;
7.网络类调用该方法,并把消息发送过来,回调结束!