block代码块介绍
关于block的简单介绍
什么是block?
Block是C语言的一个语法特性,同时也是C语言的运行时特性,它很像C中的函数指针,因为你可以像使用函数指针一样的去使用block对象;它也很像C++中的函数对象,因为除了要执行的代码,block还可以携带和block绑定的状态信息。
代码块的结构
代码块的简单赋值与调用
// 将block块赋值给一个变量testblock,然后直接通过变量来调用代码块中的代码
int(^testblock)(int a, int b) = ^(int a, int b){
return a + a + b * a;
}; NSLog(@"\n------testblock代码块执行方法为:%d", testblock(3,6));
typedef代码块
typedef void(^ABETestBlock)(int a, int b); - (void)startTestSuccessBlock:(<span style="font-family: Arial, Helvetica, sans-serif;">ABETestBlock</span><span style="font-family: Arial, Helvetica, sans-serif;">) sucessBlock</span> withFailedBlock:(<span style="font-family: Arial, Helvetica, sans-serif;">ABETestBlock</span><span style="font-family: Arial, Helvetica, sans-serif;">) failedBlock;</span>
__block的使用
在block内只能读取在同一个作用域的变数而且没有办法修改在block外定义的任何变数,此时若我们想要这些变数能够在block中被修改,就必须在前面挂上__block的修饰词
int number1 = 1;
__block int number2 = 2; void(^block__test)() = ^(){
number1++;//这句话不可以执行,因为没有 __block 前缀
number2++;
};
block__test();//调用代码块
NSLog(@"%d", number1);
NSLog(@"%d", number2);
__weak的使用
__weak typeof(self) weakSelf = self;
代码块的简单使用:
#import <UIKit/UIKit.h> typedef void(^blockOne)(int a, int b); @interface ABEButton : UIButton @property (strong, nonatomic) blockOne buttonBlock1;
@property (strong, nonatomic) void(^buttonBlock2)(int a, int b); + (ABEButton*)buttonWithBlock:(void(^)(int a, int b)) block; @end
- (BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event{
NSLog(@"开始点击");
if (_buttonBlock1) {
_buttonBlock1(100, 200);
}
if (_buttonBlock2) {
_buttonBlock2(100, 200);
}
return [super beginTrackingWithTouch:touch withEvent:event];
}
+ (ABEButton*)buttonWithBlock:(void (^)(int, int))block{
if (block) {
block(100, 200);
}
ABEButton *button = [[ABEButton alloc] init];
return button;
}
下面是ABEButton(刚刚创建的类)的使用:
ABEButton *button = [ABEButton buttonWithBlock:^(int a, int b) {
NSLog(@"button初始化,方法中调用block代码块");
NSLog(@"参数为:%d, %d", a, b);
}];
button.buttonBlock1 = ^(int a, int b){
NSLog(@"点击按钮时调用buttonBlock1代码块");
NSLog(@"参数为:%d, %d", a, b);
};
button.buttonBlock2 = ^(int a, int b){
NSLog(@"点击按钮时调用buttonBlock2代码块");
NSLog(@"参数为:%d, %d", a, b);
};
代码块的使用小结
- 在实际开发中,我们在编写一些公共类的时候,代码块其实是可以和协议交互只用的。个人认为,有一些简单地方法,就是可以由代码块来完成的。方便开发。
block代码块介绍的更多相关文章
- block(代码块)的介绍以及使用方法和变量之间的关系
http://blog.csdn.net/menxu_work/article/details/8762848 block(代码块)的介绍以及使用方法和变量之间的关系 block(代码块)的介绍以及使 ...
- Block代码块中使用局部变量注意点
第一次写代码遇到报这个错,实在是想不通为什么,按常理应该是不会有问题,报错的呀??纠结了一会之后只好仔细查看报错原因咯,原来是: 当我们在block代码块中使用局部变量时,就会很容易出现如图的错误. ...
- IOS学习4——block代码块
本文转载自:iOS开发-由浅至深学习block 一.关于block 在iOS 4.0之后,block横空出世,它本身封装了一段代码并将这段代码当做变量,通过block()的方式进行回调.这不免让我们想 ...
- iOS-#ifdef DEBUG代码块介绍
iOS-#ifdef DEBUG宏定义介绍 一.#ifdef DEBUG代码块 #ifdef DEBUG // Debug 模式的代码... #else // Release 模式的代码... #en ...
- IOS Block代码块的定义与使用
代码块的本质是和其他的变量类似,不同的是,代码块存储的数据是一个函数体.使用代码块,你可以像调用其他标准函数一样的调用,可以传入参数,并得到返回值. 脱字符是代码块的语法标记.下图表示代码块的 ...
- OC Block(代码块)
#import "ViewController.h" @interface ViewController () @end @implementation ViewControlle ...
- iOS - OC Block 代码块
前言 Block 是一段预先准备好的代码,可以在需要的时候执行,可以当作参数传递.Block 可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值.Block 是 C 语言的,类似于一个 ...
- iOS - Block 代码块
1.Block Block 是一段预先准备好的代码,可以在需要的时候执行,可以当作参数传递.Block 可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值.Block 是 C 语言的, ...
- [转] java代码块 介绍
//执行顺序:(优先级从高到低.)静态代码块>mian方法>构造代码块>构造方法. 其中静态代码块只执行一次.构造代码块在每次创建对象是都会执行. 1 普通代码块 1 //普通代码块 ...
随机推荐
- SOSEx ReadMe
Quick Ref:--------------------------------------------------bhi [filename] BuildHeapIndex - Builds a ...
- [原创]dm642_HPI调通并boot成功
一直在折腾前段时间画好的dm642+lpc4357板子,说明下这个板子的结构: 主芯片为DM642,这个片子很老了,但因为对这个片子熟悉,别折腾 没有给DM642加FLASH,配了一片LPC4357, ...
- g++的常用参数
-c 编译成目标文件.o-o 指定输出文件名,输出文件名跟在-o后面,用空格分隔.如果不使用这个选项,缺省的输出文件名为a.out.-g 产生有调试信息的可执行文件-w 不产生警告信息-l 连接指定的 ...
- hadoop 学习笔记 (十) mapreduce2.0
MapReduce的特色---不擅长的方面 >实时计算 像mysql一样,在毫秒级或者秒级内返回结果 >流式计算 Mapreduce的输入数据时静态的,不能动态变化 MapReduce自身 ...
- mysql常见字符串处理函数结束
一.简明总结 ASCII(char) 返回字符的ASCII码值 BIT_LENGTH(str) 返回字符串的比特长度 CONCAT(s1,s2…,sn) 将s1,s2…,sn连接成字符串 CONCAT ...
- 悟透Javascript之 原型prototype
构造函数的Prototype上定义的方法确实可以通过对象直接调用,而且代码是共享的.我表示我不懂.太难理解了,艹.在Javascript中,prototype不但能让对象共享自己的财富,而且proto ...
- [BZOJ2173]整数的lqp拆分
[题目描述] lqp在为出题而烦恼,他完全没有头绪,好烦啊… 他首先想到了整数拆分.整数拆分是个很有趣的问题.给你一个正整数N,对于N的一个整数拆分就是满足任意m>0,a1 ,a2 ,a3…am ...
- Linux Shell编程(17)——嵌套循环
嵌套循环就是在一个循环中还有一个循环,内部循环在外部循环体中.在外部循环的每次执行过程中都会触发内部循环,直到内部循环执行结束.外部循环执行了多少次,内部循环就完成多少次.当然,不论是外部循环或内部循 ...
- PHP按最大宽高等比例缩放图片类
本来用phpthumb来缩略图片是十分方便的,但是最近在sae上写项目发现phpthumb在sae上保存文件时会出问题,想来实现一个简单的按最大宽高等比例缩放图片类也并不困难,于是便自己写了一个方便修 ...
- activity跳转关闭软件盘
之前试过 if(getWindow().getAttributes().softInputMode==WindowManager.LayoutParams.SOFT_INPUT_STATE_UNSPE ...