Objective- C 编程 Block

来源:互联网 发布:淘宝 国际米兰球衣 编辑:程序博客网 时间:2024/04/30 14:42

Objective- C 编程  Block

一.Block语法

Block是块语法,本质上是匿名函数(没有名称的函数).标准C里面没有Block,C语言的后期扩展版本,加入了匿名函数.Block语法和函数指针很相似.因为Block是匿名函数,block变量存放的函数的实现,通过block变量能直接调用函数.代码块本质上是和其他变量类似.不同的是,代码块存储的数据是一个函数体.使用代码块是,你可以像调用其他标准函数一样,传入参数,并得到返回值.

Block语法:下图是如何把块变量赋值给一个变量的语法讲解:


Block类型:int (^)(int)

Block变量:myBlock

Block值:^int (int num) {return 7 * num;}

即: ^返回值类型 (参数列表) {函数体}  其中 返回值类型  可以省略

二.Block使用

int (^block1) (int x, int y) = ^(int x, int y)

{

return x + y;
}

int a = block1(2, 4);//block的使用和函数指针的使用类似

NSLog(@”%@”, a);

打印结果:6

 

Block进行typedef:

Typedef int (^BlockType) (int x, int y);

原类型是:int (^) (int x, int y)

新类型是:BlockType

 

Block写法:

int (^block1) (int x, int y) = ^(int x, int y)

{
      return x + y;

};

等价于:

BlockType block1 = ^(int x, int y)

{

      return x + y;

};

 

三.Block 举例

1.block 与 局部变量


局部变量可以使用,但是不能改变


 

在代码块中改变局部变量编译不通过.怎么在代码中改变局部变量呢?在局部变量前面加上关键字:__block


2.block与全局变量


3.参数是NSString *的代码块


4.使用block进行数组排序


打印结果是:sortArray:(

      bb,

      cc,

      dd,

      ee

)

5.代码块的递归调用

代码块想要递归调用,代码块变量必须是全局变量或者是静态变量,这样在程序启动的时候代码块变量就初始化了.可以递归调用


打印结果:

num:4

num:3

num:2

num:1


1 0
原创粉丝点击