Block专题
来源:互联网 发布:混沌与秩序2救赎数据库 编辑:程序博客网 时间:2024/06/08 08:12
Block的作用很强大,熟练的掌握block的使用,在项目中进行类的封装时具有很大的优势,也能够节省很多时间,博主在此制作简单分析,各路仁兄,走过路过,请在小店休息片刻,关注博主的新浪微博:http://weibo.com/u/2990535753
1、block简单示例:
//一、在单个类中实现
//1.声明—》》返回值类型(^block名)(参数类型1,参数类型2);
int(^block1)(int,int);
//2.实现—>>^(参数类型1 参数1,参数类型2 参数2){ … };
block1 = ^(inta, int b){
returna +b;
};
//3.调用
int result = block1(1,2);
returna +b;
};
//3.调用
int result = block1(1,2);
NSLog(@"result = %d", result);
//二、void类型的block
//1.声明
void(^block2)();
//2.实现
/*实现方法1
block2 = ^{
//...
};
*/
//实现方法2
block2 = ^(){
NSLog(@"空类型block");
};
//3.调用block
//1.声明
void(^block2)();
//2.实现
/*实现方法1
block2 = ^{
//...
};
*/
//实现方法2
block2 = ^(){
NSLog(@"空类型block");
};
//3.调用block
block2();
//三、定义block类型
//定义block类型
-->>返回值类型(^block类型)(参数类型1,参数类型2);
typedefint(^SumBlock)(int,int);
//1.声明block
SumBlocksumBlock;
//2.实现
sumBlock = ^(inta, intb){
returna + b;
};
//3.调用
int result = sumBlock(1,2);
//3.调用
int result = sumBlock(1,2);
NSLog(@"%d", result);
2.block作为参数
//一、整型返回值block做参数
TestViewController.h文件中
//整型返回值block-->>(返回值类型(^)(参数类型1,参数类型2))block名
//1.声明
- (int)testBlock1:(int(^)(int,int))block;
TestViewController.m文件中
//实现方法
- (int)testBlock1:(int(^)(int,int))block
{
//3.调用block
intresult = block(1,2);
returnresult;
- (int)testBlock1:(int(^)(int,int))block
{
//3.调用block
intresult = block(1,2);
returnresult;
}
ViewController.m文件中
TestViewController*testVC = [[TestViewControlleralloc]init];
//2.调用方法,实现block—》实现block时,参数要给定形参变量
int result = [testVCtestBlock1:^int(inta, intb) {
returna + b;
}];
returna + b;
}];
NSLog(@"result1 = %d", result);
//二、空类型block做参数
TestViewController.h文件中
//空类型block—>>(返回值类型(^)())block名;
//1.声明
- (void)testBlock2:(void(^)())block;
TestViewController.m文件中
//实现方法
- (void)testBlock2:(void(^)())block
{
//3.调用block
block();
{
//3.调用block
block();
}
ViewController.m文件中
TestViewController *testVC = [[TestViewController alloc]init];
//2.实现block
[testVC testBlock2:^{
NSLog(@"voidblock实现");
}];
//2.实现block
[testVC testBlock2:^{
NSLog(@"voidblock实现");
}];
//三、定义block类型 做参数
TestViewController.h文件中
//定义block类型
typedefint(^TestBlock)(int,int);
//block类型
- (void)testBlock3:(TestBlock)testBlock;
TestViewController.m文件中
//实现方法
- (void)testBlock3:(TestBlock)testBlock
{
//3.调用block
int result = testBlock(2,3);
NSLog(@"result = %d", result);
{
//3.调用block
int result = testBlock(2,3);
NSLog(@"result = %d", result);
}
ViewController.m文件中
TestViewController*testVC = [[TestViewControlleralloc]init];
//2.实现block
[testVC testBlock3:^int(inta, int b) {
return a + b;
//2.实现block
[testVC testBlock3:^int(inta, int b) {
return a + b;
}];
3.block修改局部变量
//block引用局部变量
- (void)blockConst
{
__blockint a = 10;
//1.声明
void(^block)();
//2.实现
block = ^(){
//block改变局部变量必须在局部变量声明前加上_ _block
a = 20;
NSLog(@"a = %d", a);
};
//3.调用
- (void)blockConst
{
__blockint a = 10;
//1.声明
void(^block)();
//2.实现
block = ^(){
//block改变局部变量必须在局部变量声明前加上_ _block
a = 20;
NSLog(@"a = %d", a);
};
//3.调用
block();
}
4.block引用局部变量和实例变量的引用计数问题,引用计数都会在原来基础上+1
- (void)blockCount
{
//引用计数为1
__blockNSObject *obj = [[NSObjectalloc]init];
//1.声明
void(^block)();
//2.实现
block = ^(){
//在MRC中,obj此时引用计数为2,block调用引用计数加1
// NSLog(@"%ld", obj.retainCount);
NSLog(@"obj = %@", obj);
};
//3.调用
block();
{
//引用计数为1
__blockNSObject *obj = [[NSObjectalloc]init];
//1.声明
void(^block)();
//2.实现
block = ^(){
//在MRC中,obj此时引用计数为2,block调用引用计数加1
// NSLog(@"%ld", obj.retainCount);
NSLog(@"obj = %@", obj);
};
//3.调用
block();
}
0 0
- block专题
- Block 专题
- Block专题
- 【专题】display: inline | block | inline-block;
- 封装排序专题,按姓名排序,年龄排序,Block排序
- IOS开发系列——Block专题【整理,部分原创】
- 专题
- 专题
- 专题
- iOS CoreAnimation专题——原理篇(二) UIView block动画实现原理
- Block
- block
- Block
- block
- block
- block
- block
- block
- Android之SurfaceView学习(一)
- ListView的单选和多选模式的使用
- JavaScript BOM -- setTimeout()和setInterval() 常见问题
- 内存错误(C/C++)
- Mac os下面显示隐藏文件操作命令
- Block专题
- 坐标的平移旋转
- JavaScript Core -- 事件
- Android沉浸式状态栏简单实现
- hdu 5500 Reorder the books
- 类模板与函数对象
- windows下administrator账户启用或关闭
- cmake+gcc解决extended initializer lists only available with -std=c++11 or -std=gnu++11
- CloudStack 4.4+KVM之KVM计算节点安装