zoukankan      html  css  js  c++  java
  • ios 块语法和函数指针实现回调

    代码实现:

    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.网络类调用该方法,并把消息发送过来,回调结束!

    致力于ios开发
  • 相关阅读:
    TinyCMips
    C++坑点集合
    2017,不能再咸鱼了
    浅谈C语言变量声明的解析
    独自handle一个数据库大程有感
    Async Programming
    04python 中的各种推导式(python函数)
    03python 迭代器与生成器(python函数)
    02python 装饰器(python函数)
    01python 中的函数与函数式编程(python函数)
  • 原文地址:https://www.cnblogs.com/hanjun/p/2961256.html
Copyright © 2011-2022 走看看