Chinaunix首页 | 论坛 | 博客
  • 博客访问: 463775
  • 博文数量: 145
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1060
  • 用 户 组: 普通用户
  • 注册时间: 2013-08-22 11:52
个人简介

专注计算机技术: Linux Android 云计算 虚拟化 网络

文章分类

全部博文(145)

文章存档

2016年(3)

2015年(21)

2014年(75)

2013年(46)

我的朋友

分类: C/C++

2015-05-09 05:57:25


一直明白回调的原理觉得可神秘,最近做了一个项目,多处用到回调,终于理解

这里我用了两种方式:

1、参数传递

1.1 全局:自定义一种CallBackFunc类型的函数指针   
typedef void (*CallBackFunc)(param);

1.2 在类 A(OC)中

定义回调函数的实现:

 void playCallback(param)
{
    //NSLog(@"loginCallback");
}

同时,调用类B的函数,同时把playCallback作为参数传递过去

void B::setCallBack(playCallback);

1.3 在类B(C++)中定义类型为CallBackFunc的函数指针:
CallBackFunc pCallBackFunc;

void B::setCallBack(CallBackFunc pcallbackFunc)

{

    this->pCallBackFunc = pcallbackFunc;

}

 

调用:

(*pCallBackFunc)(param);


 

2、通过事先注册回调


2.1 全局:自定义一种GETDATABYTYPE类型的函数指针

typedef void* (*GETDATABYTYPE)(int* len);


声名全局函数
extern "C" void GetdataCallBack(GETDATABYTYPE getDataByType);

2.2 在类B(C++)中定义

GETDATABYTYPE g_getDataByType = NULL;

void GetdataCallBack(GETDATABYTYPE getDataByType)
{
    if (getDataByType) {
        g_getDataByType = getDataByType;
    }
}

调用:

int len = 0

g_getDataByType(&len);

在类 A(OC)中

定义回调函数的实现:
static void *getDataHandler(int *len)
{
    //    NSLog(@"loginCallback");
}

注册回调:

B::GetdataCallBack(getDataHandler);

阅读(1635) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~