-----------android培训、java培训、java学习型技术博客、期待与您交流!-----------
OC中block的基本概念
一、 Block的基本概念
Block类型是一个C语言级别的语法和运行机制,有可执行代码以外,还包含了与堆、栈内存绑定的变量
二、Block的基本用法
用符号 ^ 来声明一个Block变量,并指明Block语句的开始。Block的主体部分包含在{ }内,
定义格式:
void (^block名)()= ^{代码块};
使用格式:
block名();// block是一个数据类型
1、无参无返回值
void (^block变量名) ( ) = ^ ( ) {
代码块语句;
};
例如:定义无参无返回值的block变量
void (^Block1) ( ) = ^ ( ){
NSLog(@"*******");
printf("########");
};
<span style="font-size:14px;">#import <Foundation/Foundation.h>
int main (int argc, const char *argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
//定义一个无参无返回值的block变量
void (^Block1) () = ^( ){
NSLog(@"*******");
printf("########\n");
};
//使用block变量
Block1();
[pool drain];
return 0;
}</span>
2、有参无返回值的block变量
void (^变量名) (参数类型及参数个数) = ^(形参列表){
代码块语句;
};
例如:(1)定义有参无返回值的block2变量, 定义变量的同时赋值
void (^Block2) (int, int ) = ^(int a, int b){
NSLog(@"a + b = %d",a + b);
};
Block2 (12 25); //Block2 的使用
(2)先定义变量后赋值
void (^Block2) (int, int ) ;
Block2= ^(int x, int y){
int m = x > y? x: y;
NSLog(@"max= %d",m);
};
BLock2 (12 25);//Block2 的使用
3、有参有返回值的block3变量
格式:
返回值类型 (^变量名) (参数类型及参数个数) = ^(形参列表){
代码块语句;
return 返回值;
};
例如:
//定义一个block类型变量
int (^Block3) (int , int) = ^(int x, int y){
return x + y;
};
int s = Block3 ( 12 25); //Block3 的使用,有返回值所以要接收
可以给block类型的变量动态的赋值,例如
Block3 = ^(int x, int y ){
return x*y;
};
//此时返回的是两个参数的乘法值
Block3 (12 25);
三、block的typedef使用
给block类型的变量起别名
typedef int(^ NewType)(int , int);
//此时NewType是一个类型
//定义一个NewType类型的变量 nt1
NewType nt1 = ^(int a, int b){
return a+b;
};
//给变量赋值
nt1 = ^(int x, int y){
return x > y? x: y;
};