代码实现:
RootViewController类的实现:

// // 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类的实现:

#import <Foundation/Foundation.h> @interface HttpRequst : NSObject<NSURLConnectionDataDelegate,NSURLConnectionDelegate>{ NSMutableData *_receiverData; } - (void)requestDataFormBlock:(void (^)(NSData * data))getData; - (void)requestDataFromFunctionPointer:(void (*)(NSData * data))getData; @end

// // 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.网络类调用该方法,并把消息发送过来,回调结束!
致力于ios开发
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架