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

时间:2023-01-14 09:40:27

C的回调函数:

callBack.h

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

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

callBack.c

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

void DSTCount(void(*CallBack)(int data_i32))
{
static int numb = 0;
numb++;
(*CallBack)(numb);
}

 

main.c

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

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

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

while (1)
{
DSTCount(customDSTCount);
}

OC的Block:

MyButton.h(继承于UIButton):

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

typedef void(^ButtonBlock)(int data_i32);

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

-(void)DSTCount:(ButtonBlock)myButtonBlockPTR;

MyButton.m(继承于UIButton):

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

-(void)DSTCount:(ButtonBlock)myButtonBlockPTR
{
static int numb = 0;
numb++;
myButtonBlockPTR(numb);
}

 

RootViewControl.m(self.window.rootViewController):

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

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参数直接输入。

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

图片补充:

C回调函数:

1)、CallBack.C

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

2)、CallBack.h

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

3)、main.c

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

OC的Block

1)、MyButton.h

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

2)、MyButton.m

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

3)、RootViewControl.m

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

4)、运行

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

嵌入式&iOS:回调函数(C)与block(OC)传 参/函数 对比的更多相关文章

  1. magento controller直接渲染Block 以及传参

    class Jago_Deal_IndexController extends Mage_Core_Controller_Front_Action { public function ajaxActi ...

  2. js addEventListener调用传参函数

    先看这段代码 function abc(key){ console.log(key); } for(let i=0;i<oInput.length;i++){ oInput[i].addEven ...

  3. Python学习教程&lpar;learning Python&rpar;--2&period;3&period;1 Python传参函数设计

    本节主要讨论设计传递多个参数子函数的设计方法. 在2.3节里我们讨论了如何自己设计一个带参数的子函数的设计方法,现在我们研究一下如何传递两个及以上参数的设计方法. 函数为何要带参数呢?其实原因很简单, ...

  4. Python学习教程&lpar;learning Python&rpar;--2&period;3 Python自定义函数传参函数设计

    Python里自定义子函数时,可以在调用时携带一些参数到子函数里去处理.具体用法结构如下: def func(arguments): statement statement etc. 定义子函数一定要 ...

  5. js中给函数传参函数时,函数加括号与不加括号的区别

    <!doctype html><html><head><script> function show() { alert("123") ...

  6. Python学习入门基础教程&lpar;learning Python&rpar;--2&period;3&period;1 Python传参函数设计

    本节主要讨论设计传递多个参数子函数的设计方法. 在2.3节里我们讨论了如何自己设计一个带参数的子函数的设计方法,现在我们研究一下如何传递两个及以上参数的设计方法. 函数为何要带参数呢?其实原因很简单, ...

  7. PHP&lowbar;零基础学php&lowbar;3PHP函数、传参函数、默认参数、函数返回值

    <?php function say_hello() //无参数 { $name="tang"; echo "hello,".$name; echo &q ...

  8. JavaScript去除空格的三种方法&lpar;正则&sol;传参函数&sol;trim&rpar;

    方法一: 个人认为最好的方法.采用的是正则表达式,这是最核心的原理. 其次.这个方法使用了JavaScript 的prototype 属性 其实你不使用这个属性一样可以用函数实现.但这样做后用起来比较 ...

  9. python 基础 4&period;0 函数的一般形式及传参

    #/usr/bin/python #coding=utf-8 #@Time   :2017/10/23 15:58 #@Auther :liuzhenchuan #@File   :函数的一般形式.p ...

随机推荐

  1. Linux 客户端 下乱码的解决方法

    最近使用xshell登陆英文版redhat,由于某些文件是中文编码,在xshell下显示乱码.折腾了很久终于找到了解决的方法,希望可以对大家有用.其他语言乱码的话,解决方法和此类似! 首先检查系统的l ...

  2. WSARecv&lpar;&rpar;

    简述:从一个套接口接收数据. #include <winsock2.h> int WSAAPI WSARecv ( SOCKET s, LPWSABUF lpBuffers, DWORD ...

  3. java的控制流程

    1.顺序结构顺序结构就是指按语句执行的先后顺序,或者说语句出现的先后顺序逐条执行程序语句.语句块,完全是按照程序平台的执行约定进行的,比如第一个 HelloWorld程序:public class H ...

  4. noi 1&period;8 11图像旋转

    水题不解释 其实我偷懒了 直接输出,,,,,,, 个人QQ:757394026团队QQ:466373640个人博客:www.doubleq.winc++/noi/信息学奥数博客:http://www. ...

  5. Struts1基础、使用Struts实现登录、使用Struts HTML标签简化开发

    Struts 1基础 为什么重拾Struts 1 曾经是最主流的MVC框架 市场份额依然很大 很多遗留系统中依旧使用 维护和升级都需要熟悉Struts 1 与Struts 2相比 编码.配置繁琐 侵入 ...

  6. 爬虫学习笔记-urllib库

    urllib库是python中一个最基本的网络请求库.可以模拟浏览器的行为,向指定的服务器发送一个请求,并可以保存服务器返回的数据. urlopen函数:在python3的urllib库中,所有和网络 ...

  7. Java Web之Servlet的三大作用域对象

    Servlet的作用域是干嘛的?答案就是共享数据而存在的,如图: 下面通过代码演示来具体讲解一下三大作用域 我们新建两个类 package main.com.vae.scope; import jav ...

  8. C&plus;&plus; code:函数指针数组

    函数指针作为一种数据类型,当然可以作为数组的元素类型.例如,要实现用菜单来驱动函数调用的程序框架,则用函数指针数组来实现就比较容易维护. #include<iostream> using ...

  9. poi excel 设置边框字体行高行宽

     final HSSFSheet sheet = wb.createSheet(sheetName + "_" + n);   System.out.println("s ...

  10. 最好最实用的二次开发教程 cms

    ◆二次开发 什么是二次开发? 二次开发,简单的说就是在现有的软件上进行定制修改,功能的扩展,然后达到自己想要的功能和效果,一 般来说都不会改变原有系统的内核. 为什么要二次开发? 随着信息化技术的不断 ...