Block Demo
1.预定义Block
typedef void(^myblock1)(int a,int b);
2.将Block做为类的属性
@property(nonatomic,strong) myblock1 block1;
3.代码demo 在.h中声明了一个方法用于调用Block

#import <Foundation/Foundation.h> typedef void(^myblock1)(int a,int b); @interface Myblock : NSObject @property(nonatomic,strong) myblock1 block1; -(void)fun:(int) seta param1 :(int)setb; @end

在.m中:
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
 | 
#import "block.h"@implementation Myblock- (instancetype)init{    self = [super init];    if (self) {             }    return self;}-(void)fun:(int) seta  param1 :(int)setb;{    _block1(seta,setb);     }@end | 
在main中:实例化类,并为作为属性的Block指明执行的方法
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
 | 
#import <Foundation/Foundation.h>#import "block.h"int main(int argc, const char * argv[]) {    @autoreleasepool {        Myblock *myblock1=[[Myblock alloc]init];        myblock1.block1=^(int a,int b)        {            NSLog(@"%d",a+b);        };          [myblock1 fun:5 param1:5];    }    return 0;} | 
OC中的Block类似C、C++的函数指针,C#的委托、匿名函数和Lambda,与其不同的是Block可以访问函数以外、词法作用域以内的外部变量的值。换句话说,Block不仅 实现函数的功能,还能携带函数的执行环境
Block对外部变量的存取管理
基本数据类型
1、局部变量
局部自动变量,在Block中只读。Block定义时copy变量的值,在Block中作为常量使用,所以即使变量的值在Block外改变,也不影响他在Block中的值。
| 
 1 2 3 4 5 6 7 8 9 10 11  | 
 { int base = 100; long (^sum)(int, int) = ^ long (int a, int b) { return base + a + b; }; base = 0; printf("%ld\n",sum(1,2)); // 这里输出是103,而不是3, 因为块内base为拷贝的常量 100 }  | 
2、STATIC修饰符的全局变量
因为全局变量或静态变量在内存中的地址是固定的,Block在读取该变量值的时候是直接从其所在内存读出,获取到的是最新值,而不是在定义时copy的常量.
| 
 1 2 3 4 5 6 7 8 9 10 11 12 13  | 
 { static int base = 100; long (^sum)(int, int) = ^ long (int a, int b) { base++; return base + a + b; }; base = 0; printf("%ld\n",sum(1,2)); // 这里输出是4,而不是103, 因为base被设置为了0 printf("%d\n", base); // 这里输出1, 因为sum中将base++了 }  | 
3、__BLOCK修饰的变量
Block变量,被__block修饰的变量称作Block变量。 基本类型的Block变量等效于全局变量、或静态变量。
注:BLOCK被另一个BLOCK使用时,另一个BLOCK被COPY到堆上时,被使用的BLOCK也会被COPY。但作为参数的BLOCK是不会发生COPY的
Block Demo的更多相关文章
- 瘋耔java语言笔记
		
一◐ java概述 1.1 ...
 - devices-list
		
转自:https://www.kernel.org/pub/linux/docs/lanana/device-list/devices-2.6.txt LINUX ALLOCATED DEVICES ...
 - 制作变形、移位、扭曲等效果:《CSS3 transform》
		
今天开始我们一起来学习有关于CSS3制作动画的几个属性:变形(transform).转换(transition)和动画(animation)等更高级的CSS3技术.本文主要介绍的是这三个属性之中的第一 ...
 - PC--CSS技巧
		
1.图片不存在的时候,显示一个默认图片 <img src=”01.jpg” onerror=”this.src=’02.jpg'” /> 2.CSS强制图片自适应大小 img {width ...
 - CSS3 转换2D transform
		
Transform字面上就是变形,改变的意思.在CSS3中transform主要包括以下几种:旋转rotate.扭曲skew.缩放scale和移动translate以及矩阵变形matrix.下面我们一 ...
 - iOS 跑马灯带图片可点击
		
项目中有个需求,需要以跑马灯的形势滚动展示用户的实时数据,跑马灯需要有用户头像,内容的长度不固定,并且可以点击,滚动效果还要足够流畅,本着不重复造轮子的心理,在网上各种搜索,发现都没法找到满足需求的d ...
 - DJango 基础 (4)
		
Django模板标签 知识点: 基本概念 常用标签 模板标签例子 模板继承与应用 注释标签 模板标签 标签在渲染的过程中提供任意的逻辑. 这个定义是刻意模糊的. 例如,一个标签可以输出内容,作为控制结 ...
 - Java知多少(31)static关键字以及Java静态变量和静态方法
		
static 修饰符能够与变量.方法一起使用,表示是“静态”的. 静态变量和静态方法能够通过类名来访问,不需要创建一个类的对象来访问该类的静态成员,所以static修饰的成员又称作类变量和类方法.静态 ...
 - 31.JS实现控制HTML5背景音乐播放暂停
		
实现控制网站背景音乐的播放暂停在html5中是非常容易和简单的,仅仅几行代码即可实现.首先在网页中嵌入背景音乐,html5代码为: <script src="http://wuover ...
 
随机推荐
- poj 1182 食物链 带权并查集
			
食物链是并查集的进阶运用的一道非常经典的题目. 题目如下: 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A, ...
 - 线性代数-矩阵-【4】点乘 C和C++的实现
			
点击这里可以跳转至 [1]矩阵汇总:http://www.cnblogs.com/HongYi-Liang/p/7287369.html [2]矩阵生成:http://www.cnblogs.com/ ...
 - Python学习笔记开篇
			
已经快30岁了,中专学历,不会什么技术,因为好吃懒做最喜欢的就是吃肉睡觉. 每次想学习技术如PhotoShop,绘声绘影,PHP,易语言,按键精灵都只是3分钟热血. 今天我想在业余时间学习Python ...
 - python网络编程(线程)
			
一.socketserver模块 之前的例子中的C/S架构只能实现同一时刻只有一台客户端可以和服务端进行数据交互,我们可以通过socketserver模块实现并发. 基于tcp的套接字,关键就是两个循 ...
 - LeetCode315—Count of Smaller Numbers After Self—Java版归并算法
			
这是我在研究leetcode的solution第一个解决算法时,自己做出的理解,并且为了大家能看懂,做出了详细的注释. 此算法算是剑指Offer36的升级版,都使用的归并算法,但是此处的算法,难度更高 ...
 - chrome开发工具指南(十四)
			
模拟和测试其他浏览器 您的任务不只局限于确保网站在 Chrome 和 Android 上出色运行.即使 Device Mode 可以模拟 iPhone 等多种其他设备,我们仍鼓励您查看其他浏览器模拟解 ...
 - Linux系统下C语言如何调用scalapack中的函数
			
在并行计算中经常需要调用scalapck(并行化的lapack)函数库里面的函数进行编程,这里简单介绍在C语言如何调用scalapck中的矩阵向量乘的函数. 注意:scalapack中的函数是用for ...
 - [自制操作系统] 图形界面&VBE工具&MMIO显存&图形库/字库
			
本文记录了在JOS(或在任意OS)上实现图形界面的方法与一些图形库的实现. 本文中支持的新特性: 支持基本图形显示 支持中英文显示(中英文点阵字库) 相关:VBE VESA MMIO 点阵字库 Git ...
 - 我的天哪,现在的移动VIN码识别已经这么。。
			
VIN码是英文(Vehicle Identification Number)的缩写,译为车辆识别代码,又称车辆识别码,车辆识别代码,车辆识别号,车辆识别代号,VIN码是表明车辆身份的代码.VIN码由1 ...
 - string和double之间的相互转换(C++)
			
很多人都写过这个标题的文章,但本文要解决的是确保负数的string和double也可以进行转换. 代码如下: string转double double stringToDouble(string nu ...