首页 > 代码库 > Block
Block
Block
目录
- 概述——对Block的理解
- Block的操作
创建Block
使用Block
- Block的用途
概述——对Block的理解
Block代码块,有时候我们可以把功能代码块的封装放到block里面,然后通过使用block来实现某些功能,除此之外,block还有很多其他强大的功能
Block的操作
创建Block
返回类型 (^block名)(参数列表) = ^(参数列表){ };
例如
void (^myblock)( ) = ^( ){ };
int (^myblock)( int,int) = ^(int a,int b){对a、b的处理};
使用Block
需要带上“( )”,例如:myblock( );myblock(10,20);
block里面改变外部的局部变量
- block内部可以访问外部变量
- 默认情况下,block内部不能修改外部的局部变量
- 给局部变量加上__block关键字,则这个局部变量可以在block内部进行修改
使用typedef定义block类型(和指向函数的指针很像),感觉有点像面向对象编程中松耦合和多态的思想,例如:
typedef int (^myblock3)(int,int);
myblock3 block0,block1;
block0 = ^(int a,int b){return a-b;};
block1 = ^(int a,int b){return a+b;};
Block的用途
界面传值
在SecondViewController.h中定义一个block,并用该block给SecondViewContrller声明一个block对象
typedef void (^PassValueBlock)(NSString *);
@property (nonatomic,copy) PassValueBlock passValueBlock;
当SecondViewController消失时,调回到第一个界面所做处理
if(_passValueBlock !=nil &&![_textField.text isEqualToString:@""]){
_passValueBlock(_textField.text);
}
在FirstViewController中,跳转前所做处理
PassValueBlock block = ^(NSString *str){
_showLabel.text = str;
};
secondVC.passValueBlock = block;
回调
Block