嵌入式&iOS:回调函数(C)与block(OC)传 参/函数 对比

嵌入式&iOS:回调函数(C)与block(OC)传 参/函数 对比

C的回调函数:

callBack.h

1)、声明一个doSomeThingCount函数,参数为一个(无返回值,1个int参数的)函数。

1
void DSTCount( void (*CallBack)( int data_i32));

 

callBack.c

1)、在doSomeThingCount函数,对运行次数自增,并调用参数--函数。

1
2
3
4
5
6
void DSTCount( void (*CallBack)( int data_i32))
{
     static int numb = 0;
     numb++;
     (*CallBack)(numb);
}

 

main.c

1)、定义一个customdoSomeThingCount函数,打印数据。

1
2
3
4
void customDSTCount( int data_i32)
{
     printf( "%d\n" ,data_i32);
}

2)、main函数里,运行 callBack.h 的 DSTCount 函数,参数为main里的customDSTCount函数。

1
2
3
4
while (1)
{
     DSTCount(customDSTCount);
}

 

 

 

OC的Block:

MyButton.h(继承于UIButton):

1)、定义一个Block的参数数量、类型。

1
typedef void (^ButtonBlock)( int data_i32);

2)、声明一个doSomeThingCount函数,带Block参数。(注意,这里不需要加*,类用习惯了,参数随手就加个*)

1
-( void )DSTCount:(ButtonBlock)myButtonBlockPTR;

 

MyButton.m(继承于UIButton):

1)、在doSomeThingCount函数,对运行次数自增,并调用Block参数。

1
2
3
4
5
6
-( void )DSTCount:(ButtonBlock)myButtonBlockPTR
{
     static int numb = 0;
     numb++;
     myButtonBlockPTR(numb);
}

 

RootViewControl.m(self.window.rootViewController):

1)、viewDidLoad函数,定义一个(100,100,100,100)、红色的按钮实例,按钮添加事件,把按钮加到self.view上。

1
2
3
4
5
6
7
MyButton *tempButton = [[MyButton alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
     
tempButton.backgroundColor = [UIColor redColor];
     
[tempButton addTarget:self action:@selector(mybuttonClick:) forControlEvents:UIControlEventTouchUpInside];
     
[self.view addSubview:tempButton];

2)、按钮点击调用,调用MyButton里的DSTCount函数,Block参数直接输入。

1
2
3
4
5
6
-( void )mybuttonClick:(MyButton*)button
{
     [button DSTCount:^( int data_i32) {
         printf( "%d\n" ,data_i32);
     }];
}

 

 

 

 

 

 

图片补充:

C回调函数:

1)、CallBack.C

2)、CallBack.h

3)、main.c

 

 

 

OC的Block

1)、MyButton.h

2)、MyButton.m

3)、RootViewControl.m

4)、运行

标签: 嵌入式, iOS开发

转载于:https://www.cnblogs.com/gh0408/p/6239610.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值