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