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 //普通代码块 ...
随机推荐
- OOS升级服务
给我们的应用程序做个版本更新服务,展示一个安装程序如何实现自动更新. //服务组,添加需要的任何服务 public enum ServerEnum { AutoupdateService,//自动升级 ...
- 【原】K3Cloud平台开发之Python插件
有时候我们的表单可能很简单,只是一个简单交互的表单,但有可能还是要劳师动众的给它建个工程写个插件,是不是很不爽?例如我有如下一个表单: 功能很简单就是选个业务对象,收集绑定几个字段名,然后确定返回一个 ...
- 根据http协议传送数据
发送的内容: [50 4f 53 54 20 2f 64 65 78 2f 66 69 72 65 70 6f 77 65 72 20 48 54 54 50 2f 31 2e 31 0d 0a 43 ...
- 在iOS中创建静态库
如果您有不错的原创或译文,欢迎提交给我们,更欢迎其他朋友加入我们的翻译小组(联系qq:2408167315). =========================================== ...
- 读书笔记-----Java并发编程实战(一)线程安全性
线程安全类:在线程安全类中封装了必要的同步机制,客户端无须进一步采取同步措施 示例:一个无状态的Servlet @ThreadSafe public class StatelessFactorizer ...
- 《Apache Spark源码剖析》
Spark Contributor,Databricks工程师连城,华为大数据平台开发部部长陈亮,网易杭州研究院副院长汪源,TalkingData首席数据科学家张夏天联袂力荐1.本书全面.系统地介绍了 ...
- SPOJ-COT-Count on a tree(树上路径第K小,可持久化线段树)
题意: 求树上A,B两点路径上第K小的数 分析: 同样是可持久化线段树,只是这一次我们用它来维护树上的信息. 我们之前已经知道,可持久化线段树实际上是维护的一个前缀和,而前缀和不一定要出现在一个线性表 ...
- 20140704笔试面试总结(java)
1.java数组定义 1.与其他高级语言不同,Java在数组声明时并不为数组分配存储空间,因此,在声明的[]中不能指出数组的长度 2.为数组分配空间的两种方法:数组初始化和使用new运算符 3.未分配 ...
- POJ1218
Problem C Time Limit : 2000/1000ms (Java/Other) Memory Limit : 20000/10000K (Java/Other) Total Su ...
- linux apache模块的安装
最近,想使用apache的mod_status来查看一下apache的服务器状态,就自己安装了一下mod_status,以前觉得好像很难的东西其实很简单. 第一步, 去http://httpd.apa ...