block之---数据传递
block值传递分为两种情况
1、值传递
含义:
类似于函数参数的值传递,block内部对值的改变对外部没有影响,外部改变对block内部也没有影响。
情况
- block访问
外部局部变量没有被任何关键字修饰
注意:block中的外部变量在定义block时被传入block,而不是在执行时被传入.
1、指针传递
含义:类似于函数参数的指针传递,block内部对值的改变对外部有影响,外部改变对block内部也有影响。
情况:
- block访问外部局部变量没有被__block修饰
- block访问外部局部变量没有被static修饰
- block访问外部全局变量
验证代码:
- 值传递
- (void)viewDidLoad {
[super viewDidLoad];
int a = 3;
void (^block)() = ^{
NSLog(@"a = %d", a);
};
a = 5;
block();
}
打印结果为:a = 3
此代码也验证了block中的外部变量在定义block时被传入block,而不是在执行时被传入
2.指针传递
- (void)viewDidLoad {
[super viewDidLoad];
__block int a = 3;
void (^block)() = ^{
NSLog(@"a = %d", a);
};
a = 5;
block();
}
打印结果为:a = 5
block之---数据传递的更多相关文章
- Android剪切板传递数据传递序列化对象数据
一.剪切板的使用介绍 1. 剪切板对象的创建 使用剪切板会用到,ClipboardManager对象,这个对像的创建不可以使用构造方法,主要是由于没有提供public的构造函数(单例模式),需要使用A ...
- OpenGL进阶(十一) - GLSL4.x中的数据传递
in out 对于 vertex shader,每个顶点都会包含一次,它的主要工作时处理关于定点的数据,然后把结果传递到管线的下个阶段. 以前版本的GLSL,数据会通过一些内建变量,比如gl_Vert ...
- [源码]解析 SynchronousQueue 上界,下界.. 数据保存和数据传递. 堵塞队列. 有无频繁await?
简析SynchronousQueue.LinkedBlockingQueue(两个locker,更快),ArrayBlockingQueue(一个locker,读写都竞争) 三者都是bloc ...
- OpenGL笔记<4> 数据传递二
Sending data to a shader using uniform Preface 上一节我们介绍了通过顶点属性量进行数据传递,今天我们介绍一下通过uniform变量来进行数据传递的方法. ...
- Java 前台后台数据传递、中文乱码解决方法
1.向前台传递数据;2.向后台传递数据;3.ajax post 提交数据到服务端时中文乱码解决方法;4.数组类型参数传递; 1.向前台传递数据:1.1 字符串数据传递: 这种方式只是单一的向前台传递 ...
- Java WEB中的HttpServletResponse数据传递
1.什么是HttpServletResponse 2.使用HttpServletResponse向浏览器发送数据及相关实例. 实例1:实现文件下载功能 实例2:实现验证码注册 实例3:实现页面3秒后跳 ...
- OpenGL/GLSL数据传递小记(3.x)(转)
OpenGL/GLSL规范在不断演进着,我们渐渐走进可编程管道的时代的同时,崭新的功能接口也让我们有点缭乱的感觉.本文再次从OpenGL和GLSL之间数据的传递这一点,记录和介绍基于OpenGL3.x ...
- Java多线程学习---------超详细总结(java 多线程 同步 数据传递 )
目录(?)[-] 一扩展javalangThread类 二实现javalangRunnable接口 三Thread和Runnable的区别 四线程状态转换 五线程调度 六常用函数说明 使用方式 为什么 ...
- EXTJS中grid的数据特殊显示,不同窗口的数据传递
//EXTJS中grid的数据特殊显示renderer : function(value, metaData, record, rowIndex, colIndex, store, view) { v ...
随机推荐
- 二、HDFS学习
Hadoop Distributed File System 简称HDFS 一.HDFS设计目标 1.支持海量的数据,硬件错误是常态,因此需要 ,就是备份 2.一次写多次读 ...
- php中使用mysql_fetch_object向页面输出结果,总结!
public function selectResultByThird() { if ((!empty ($_REQUEST["bigname"])) && (!e ...
- CodeForces 622C Not Equal on a Segment
预处理p[i],p[i]表示:[p[i],i]这段闭区间上所有数字都是a[i] 询问的时候,如果xi==a[ri]并且p[ri]<=li,一定无解 剩下的情况都是有解的,如果xi!=a[ri], ...
- JS利用短路原理简写if语句
看GoogleDoodle-Dance的源代码,学习到一个小知识——简写if语句. 几乎所有语言中||和&&都遵循“短路”原理,如&&中第一个表达式为假就不会去处理第二 ...
- 史上最坑的证书报错解决方法:Code=3000 "未找到应用程序的“aps-environment”的权利字符串"
在ios注册远程通知获取设备令牌token的时候 // 注册远程通知获取设备令牌 toKen [[ UIApplication sharedApplication ] registerForRemot ...
- Delphi 常用函数(数学函数)round、trunc、ceil和floor
源:Delphi 常用函数(数学函数)round.trunc.ceil和floor Delphi 常用函数(数学) Delphi中怎么将实数取整? floor 和 ceil 是 math unit 里 ...
- Git和Github的配合使用
Git教程 http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 Git 本地仓库详解 ...
- 从移动硬盘开机,引导VHD(Win10)
STEP 1 USB隨身碟能順利Boot Win10,點擊[主引導記錄]來設定Windows NT6.x引導程序與啟動記錄. STEP 2 事實上,格式化時MBR的類型預設就是Windows NT 6 ...
- linux Cron 执行Django 任务计划
用shell 脚本调用python 脚本如下 #!/bin/bash export FLAVOR=liveexport PYTHONPATH=$PYTHONPATH:/home/alex/Django ...
- APPcache
<!DOCTYPE html> <html manifest="example.appcache"> <head> <title>& ...