虽然block类型的变量是用来存储1断代码的.
但是1个block类型的变量并不是任意的代码段都可以存储的 而是有限定的.
在声明block变量的时候,必须要指定这个block变量存储的代码的返回值类型是什么,参数是什么.
. 在声明block变量的时候,必须要指定这个block可以存储的代码段的返回值类型和参数.
声明block变量的语法:
void (^myBlock)();
void (^myBlock1)(int num1,int num2);
int (^myBlock2)(int num1,int num2);
. 虽然语法看起来相当怪异,但是这是固定的.
block变量在声明的时候 要指定这个变量存储的代码段的返回值 和 参数
返回值类型 (^block变量名)(参数列表);
. 为block类型的变量赋值很简单. 只需要将符合要求的代码段赋值给block变量.
. 如何写1个符合要求的代码段.
语法:
^返回值类型(参数列表){
代码;
};
^void(){
NSLog(@"呵呵1");
NSLog(@"随便2");
};
void (^myBlock1)();
myBlock1 = ^void(){
NSLog(@"呵呵1");
NSLog(@"随便2");
};
当然完全可以在声明block变量的同时直接赋值.
^void(int num1,int num2){
int num3 = nim1 + num2;
NSLog(@"num3 = %d",num3);
};
void (^myBlock2)(int num1,int num2) = ^void(int num1,int num2){
int num3 = nim1 + num2;
NSLog(@"num3 = %d",num3);
};
^int(int num1,int num2){
int num3 = num1 + num2;
return num3;
};
int (^myBlock3)(int num1,int num2) = ^int(int num1,int num2){
int num3 = num1 + num2;
return num3;
};
. block变量中存储的是1段符合要求的代码.
. 如何执行?
block变量名();
如果存储在block变量中的代码段有参数,那么给参数就可以了.
void (^myBlock)() = ^void{
NSLog(@"呵呵");
};
void (^myBlock)(int,int) = ^void(int num1,int num2){
NSLog(@"%d + %d = %d",num1,num2,num1+num2);
};
int (^myBlock)(int,int) = ^(int num1,int num2){
return num1 + num2;
};
void (^block1)() = ^{
.....
};
.遇到的问题.
.我们学习过typedef 给已经存在的类型取1个别名.
typedef void (^newType)();
newType myBlock;
首先,myBlock是1个变量.1个block类型的变量.这个变量要求存储的代码段无返回值并且没有参数.
myBlock = ^{
NSLog(@"呵呵");
};
myBlock();
typedef int (^newType)(int,int);
代表为返回值为int类型,参数有两个int类型的参数的block类型 定义了1个别名叫做newType.
newType sumBlock = ^(int num1,int num2){
return num1 + num2;
};
int sum = sumBlock(10,20);
. 默认情况下,block内部可以取外部的变量的值.
可以修改全局变量,但是无法修改外部的局部变量.
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/yi_zz32/article/details/48845017