ios 塊文法和函數指標實現回調

來源:互聯網
上載者:User

代碼實現:

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.網路類調用該方法,並把訊息發送過來,回調結束!

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.