Block

1、认识Block

Block封装了一段代码,可以在任何时候执行
Block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值,它和传统的函数指针很类似,但是有区别:block是inline(内联函数)的,并且默认情况下它对局部变量是只读的
苹果官方建议尽量多用block。在多线程、异步任务、集合遍历、集合排序、动画转场用的很多
2、Blocks的定义
 1 //Blocks的定义:
 2 int (^MySum)(int, int) = ^(int a, int b) {
 3     return a+b;
 4 };
 5 //定义了一个叫MySum的blocks对象,它带有两个int参数,返回int。等式右边就是blocks的具体实现
 6 //Block可以访问局部变量,但是不能修改。
 7 int sum = 10;
 8 int (^MyBlock)(int) = ^(int num) {
 9     sum++;//编译报错
10     return num * sum;
11 };
12 //如果要修改就要加关键字:__block
13 __block int sum = 10;

  Block可以访问局部变量,但是不能修改,若要修改就要加关键字:__block(两个下划线)  如:

1 __block int c = 15;        //__block 有两个下划线
2 MySum sum = ^(int a, int b)        //声明了一个block变量
3 {
4     c = 19;//如果外部的变量用了__block关键字,就可以在block内部修改这个变量
5     NSLog(@”c is %i”, c);    //block可以访问外面定义的变量
6 }; 

3、Blocks和函数、指针对比

 1 //定义函数指针
 2 int (*myFn)();
 3 
 4 //定义Blocks
 5 int (^MyBlocks)(int,int);
 6 
 7 //调用函数指针
 8 (*myFn)(10, 20);
 9 
10 //调用Blocks
11 MyBlocks(10, 20);

  Block、函数、指针三种方式实现两个数相加 下图:

  

  或者通过typedef(用于定义类型)定义类型后实现两数相加:

 1 void test1() {
 2     // 定义了Sum这种Block类型
 3     typedef int (^Sum) (int, int);
 4     // 定义了sump这种指针类型,这种指针是指向函数的
 5     typedef int (*Sump) (int, int);
 6     // 定义了一个block变量
 7     Sum sum1 = ^(int a, int b) {
 8         return a + b;
 9     };
10     int c = sum1(10, 10);
11     NSLog(@"%i", c);
12     // 定义一个指针变量p指向sum函数
13     Sump p = sum;
14     // c = (*p)(9, 8);
15     c = p(9, 8);
16     NSLog(@"%i", c);
17 }

4、Blocks的赋值

1 //在声明的同时定义变量,然后赋值
2 int (^MySum)(int,int) = ^(int a,int b) {
3     return a + b;
4 };
5 //也可先用typedef先声明类型,再定义变量进行赋值
6 typedef int (^MySum)(int,int);
7 MySum sum = ^(int a,int b) {
8     return a + b;
9 }; 

 

转载于:https://www.cnblogs.com/CJDog/p/5116418.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/396959.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

坚持学习WF(8):本地服务之调用外部方法

WF提供了一组核心服务,例如在SQL 数据库中存储工作流实例的执行详细信息的持久性服务,计划服务,事务服务和跟踪服务。除了这些WF也提供了另外一种服务,叫做Local Service也可以叫做Data exchange service。主要是实现工作流和宿主…

c++归并排序_合并排序法

一、合并排序(Merge Sort) 就是将多个有序数据表合并成一个有序数据表。如果参与合并的只有两个有序表,那么称为二路合并。对于一个原始的待排序序列,往往可以通过分割的方法来归结为多路合并排序。二、一个待排序的原始数据序列进行合并排序的基本思路是…

微习惯虽好,但是最重要的还是坚持

2019独角兽企业重金招聘Python工程师标准>>> “微习惯”一词是由美国的斯蒂芬盖斯提出的。他以前是个宅男,懒虫,为了改变自己而找到了这个方法。并且在自己身上实验成功。养成了好的读书、写作和健身的习惯,实现了人生的华丽转身。…

带你了解zabbix整合ELK收集系统异常日志触发告警~

今天来了解一下关于ELK的“L”-Logstash,没错,就是这个神奇小组件,我们都知道,它是ELK不可缺少的组件,完成了输入(input),过滤(fileter),output(输…

用python设计学生管理系统_Python实现GUI学生信息管理系统

本文实例为大家分享了Python实现GUI学生信息管理系统的具体代码,供大家参考,具体内容如下 项目环境: 软件环境: OS:RedHat6.3 Lib:Pygtk Language:Python Support tool:Glade3 项目简述: ①Glade3设计用户的登录窗口,功…

python理论知识选择题_Python基础自测题答案和基础知识梳理

Python基础自测题答案和基础知识梳理 1.关于Python中的lambda表达式的函数体自能是单独一条语句,所以答案选择C。 例如:>>>g lambda x: 2*x1 g(3) 7 2.Python中的变量不需要事先声明,但是需要创建和赋值,否则你怎么用&a…

查找算法之顺序查找

参考: 1. 顺序查找 | 博客园 基本思想: 顺序查找,就是从第一个元素开始,按索引顺序遍历待查找序列,直到找出给定目标或者查找失败。 特点: 1. 对待查序列(表)无要求 -- 待查找序列可…

python数据预测_python时间序列预测股票走势

提示:这只是个训练模型,技术不具备实际意义,入市需谨慎。 首先调用tushare包 import tushare as ts import pandas as pd import matplotlib.pyplot as plt 查自己比较感兴趣的股票,这里我查找的是新能源/燃料电池/氢燃料&#xf…

30.Android之百度地图简单学习

今天用了下百度地图,简单写了一个例子,记录下。 一、申请AK(API Key) 要想使用百度地图sdk,就必须申请一个百度地图的api key。申请流程挺简单的。 首先注册成为百度的开发者,然后打开http://lbsyun.baidu.…

python爬取b站弹幕_爬取B站弹幕并且制作词云

目录 SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。 爬取弹幕 1. 从手机端口进入网页爬取找到接口 2.代码 import requests from lxml import etree import numpy as np urlhttps://api.bilibili.com/x/v1…

python控制灯_Python 控制树莓派 GPIO 输出:控制 LED 灯

树莓派 GPIO 控制输出的入门应该都是从控制 LED 灯开始的吧。 树莓派版本:Model 3B 树莓派系统:Raspbian Stretch with desktop and recommended software,April 2019 连接装置 准备一个 LED 灯,两个两头都为母的杜邦线。对照下图…

报错型sql注入原理分析

0x00:前言关于sql注入,经久不衰,现在的网站一般对sql注入的防护也相对加强了,2016年的***测试报告中,出现最多的是xss(跨站脚本***)和明文传输等,但是对sql注入的利用方式&#xff0…

matlab矩阵 0,matlab zeros初始化为0矩阵

zeros为创建一个值为零的数组;如matrix1zeros(4,5);%4*5的矩阵,矩阵中每个元素都为0matrix2zeros(4,5,3);%4*5*3的数组,数组中每个元素都为0下面举一个将图像存到数组的例子对RGB图片1.jpg,2.jpg;大小为700*500*3创建4…

批处理命令Start

2019独角兽企业重金招聘Python工程师标准>>> 运行hello.exe(最小化) start /MIN hello.exe 用记事本打开readme.txt(最大化) start /MAX notepad readme.txt 打开网页 start http://www.baidu.com/ 调用另外一个脚本&…

arcgis python实例_arcgis二次开发_arcgis二次开发python_arcgis二次开发实例

[1.rar] - QQ连连看的源码.单消秒杀挂机等功能喜欢的朋友请拿去研究 [qqCHAR.rar] - qq 验证码识别程序 可以叫准确的识别出qq登陆前的验证码 [1.rar] - 本书以Visualc作为开发语言,结合大量实例,详细介绍了利用Arcobjects组件进行GIS二次开发的方法和过…

Linux命令-自动挂载文件/etc/fstab功能详解

一、/etc/fstab文件的作用磁盘被手动挂载之后都必须把挂载信息写入/etc/fstab这个文件中,否则下次开机启动时仍然需要重新挂载。系统开机时会主动读取/etc/fstab这个文件中的内容,根据文件里面的配置挂载磁盘。这样我们只需要将磁盘的挂载信息写入这个文…

一、在windows环境下修改pip镜像源的方法(以python3为例)

在windows环境下修改pip镜像源的方法(以python3为例) 1.在windows文件管理器中,输入 %APPDATA% 2.会定位到一个新的目录下,在该目录下新建pip文件夹,然后到pip文件夹里面去新建个pip.ini文件 3.在新建的pip.ini文件中输入以下内容,搞定 [glob…

得到选择框句柄 怎么操作_电脑版微信怎么多开?最简单的三种电脑版微信多开教程...

​在现实中的我们在网络上却又很多张脸,多开微信很多人都是需要的,这里就介绍3个方法给大家多开。方法1:BAT文件鼠标右键单击微信图标选择 属性在属性选项夹内复制 “目标”例如我的是("D:Program Files (x86)TencentWeChatWeChat.exe&q…

macos sierra 引导镜像_真想不到,在win10上可以制作苹果macOS启动U盘

不管你使用的是macOS还是Windows10,电脑出现启动问题是很正常的,原因有很多种,包括(但不限于)文件损坏、硬件故障和错误更新等。如果意外发生在苹果电脑上,可以使用带有安装文件的macOS启动U盘来修复它。这正是在电脑正常工作时应…

python(1) - 数据类型和变量

数据类型: 整数:就是整数,包括正整数,0,负整数 浮点数: 通俗点说,就是小数 长整数: 就是比较长的整型,通常后面会跟一个L 字符串: 字符串需要用“”或’’括起…