代碼實現:
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.網絡類調用該方法,並把消息發送過來,回調結束!