1.如何定义block变量,形式:返回值类型 (^block变量名)(参数)
》形式一求和的block变量: int (^sumBlock)(int , int ) ;
》形式二:void (^voidBlock)() ;
2.如何利用block封装代码:
^(int a , int b) {
return a + b ;
} ; // 有一个分号“ ; ”
^(){
NSLog(@"--------------------");
} ;
^{ // 没有参数括号可以省略
NSLog(@"--------------------");
} ;
3. block 访问外面变量规则:
》block 内部可以访问外面的变量。
》默认情况下,block 内部不能修改外面的局部变量;但可以修改全局变量。
》给局部变量加上 __block 关键字,那么这个局部变量就可以在block 内部修改。
4. 利用 typedef 定义block 类型:
》typedef int (^MyBlock)(int , int ) ;
// 以后就可以利用MyBlock这种类型来定义block变量。
MyBlock b1 ;
b1 = ^(int a , int b ){
return a - b ;
} ;
MyBlock b2 = ^(int a , int b) {
return a + b ;
} ;
5.例子:
#import <Foundation/Foundation.h>
typedef int (^MyBlock)(int,int); // block类型
int cc =9 ;
int main(int argc, const char * argv[]) {
int a = 20 ;
__block int b = 100 ;
void (^voidBlock)() = ^{
NSLog(@"------------");
//在bloc体内不能修改非__block声明的局部变量,可以修改全局变量和用__block声明的局部变量
//a = 10;
b = 50 ;
cc = 111;
};
NSLog(@"%d %d %d",a,b,cc);
voidBlock();
NSLog(@"%d %d %d",a,b,cc);
int (^sumBloc)(int , int);
sumBloc= ^(int a,int b){
return a+b;
};
int (^subBloc)(int,int) = ^(int a,int b){
return a - b ;
};
int sum = sumBloc(10,90);
int sub = subBloc(10,90);
NSLog(@"sum = %d sub = %d",sum,sub);
voidBlock();
//------ typedef block类型用法------------
MyBlock sum1 = ^(int a,int b){
return a + b ;
};
MyBlock sub1 ;
sub1 = ^(int a ,int b){
return a - b ;
};
NSLog(@"sum1 = %d sub1 = %d",sum1(10,20),sub1(20,10));
return 0;
}