block 用来保存一段代码
block 的标志:^
实现格式
^ 返回值类型(形参列表) { 语句... };
block跟函数很像:
1.可以保存代码
2.有返回值
3.有形参
4.调用方式一样
当发现多个方法中大部分代码相同 , 只有一部分代码经常变化
这时可以把经常变化的代码通过 block 参数传入
在block 中可以访问局部变量
默认在block内部不能修改局部变量的值
如果想修改局部变量的值 , 要在定义这个变量的时候 , 在前面加上__block
block要掌握的东西
1.如何定义block
int (^sumBlock)(int , int);
void (^myBlock)( );
2.如何封装block封装代码
^(int a ,int b){
return a - b;
};
^(){
NSLog(@"");
};
3.block访问外部变量
* block内部可以访问外部的变量
* 默认情况下,block内部不能修改外面的局部变量
* 给局部变量加上 _block关键字,这个局部变量就可以在block内部修改
* 利用typedef定义block类型
typedef int (^MyBlock)(int ,int)
以后就可以利用MyBlock这种类型来定义block变量
// MyBlock block;
MyBlock b1 , b2 ;
MyBlock b3 = ^(int a ,int b){
return 0;
};
// 用一个Block输出n条横线
void ( ^lineBlock ) ( int ) = ^ ( int n )
{
for (int i = 0; i<n ;i++){
NSLog(@"-----------------");
}
};
lineBlock(5);
// 利用block变量调用 block内部的代码
myblock( ) ;
myblock( ) ;
用block计算函数
int (^sumblock)(int , int) = ^(int a , intb)
{
return a + b;
};
int c = sumblock(10 , 11);
//
#import<Fountation/Foundation.h>
typedef int (*sumP) (int ,int);
//定义类型
typedef int (^MyBlock)(int,int);
int main()
{
MyBlock sumBlock ;
sumBlock = ^(int a , int b);{
return a + b;
};
myBlcok minusBlock = ^(int a ,int b);{
return a - b;
};
}