您的位置:首页 > 其它

block 简单使用

2012-10-12 11:24 330 查看
int minus = 7;
int(^myBlock)(int) = ^(int num ){
int i = num *minus;
NSLog(@"---%d",i);
return i;
};
int t= myBlock(10);
NSLog(@"-t==%d",t);

1.int为返回类型
2. myBlock 为block名字
3。后面的int 为传入参数类型
4。int num 传入参数

在 block里面使用变量遵循以下规则:

全局变量可访问,包括在相同作用域范围内的静态变量。

传递给block的参数可访问(和函数的参数一样)。

程序里面属于同一作用域范围的堆(非静态的)变量作为const变量(即只读)。

它们的值在程序里面的 block表达式内使用。在嵌套block里面,该值在最近的

封闭范围内被捕获。

属于同一作用域范围内并被__block存储修饰符标识的变量作为引用传递因此是

可变的。

属于同一作用域范围内block的变量,就和函数的局部变量操作一样。

每次调用 block都提供了变量的一个拷贝。这些变量可以作为const来使用,或在block封闭范围内作为引用变量。

数组
void (^blocks[])(void) ={ ^(void){puts("hello");} ,
^(void){puts("hell1111");}};

blocks[1](),blocks[0]();

__block
static int s =
10;
__block int local =200;
void(^p)(void) = ^(void) {
printf("%dn",local +global);
global ++;
s++;
local -- ;
};

p();
printf("after local %d, global %d , s %d", local, global,s);

递归
void (^p)(int) =
0;
static void (^
const blocks)(int) = ^(int i ){
if (i>0) {
printf("hello\n");
blocks(i-1);
}
};
p= blocks;
p(3);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: