码迷,mamicode.com
首页 > 其他好文 > 详细

简单理解Objective-C中的Block

时间:2015-08-25 15:40:01      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:

类似于js里面的闭包,java中的匿名函数,C#的委托,可以将func当做参数传递:

1.Block的声明

            Block的定义和函数的声明差不多,就是把函数名改成(^blockName)即可。下面是block声明的代码。

 有返回值的

int (^sumBlock) (int, int);

 无返回值的 

void (^myBlock)(int, int);

2.给block块赋值

        给声明好的block,赋值。block的值就是个函数体,给block块赋值有两种方式,一个在声明的时候赋值,一个是先声明在赋值。

先声明再赋值

//代码块的声明
void (^myBlock)(int, int);
 
//给代码块赋值
myBlock = ^(int a, int b)
{
    //test ++;  //报错
    NSLog(@"main_test = %d", test);
 
    //blockVar++不报错;
    blockVar ++;
    NSLog(@"blockVar = %d", blockVar);
 
    int sum = a + b;
    NSLog(@"a + b = %d", sum);
};

在声明的时候赋值

int (^sumBlock) (int, int) = ^(int a, int b)
{
    int sum = a + b;
    return sum;
};

3.调用block 

block的使用和普通函数的使用相同,调用方法如下:

//调用代码块并接收返回值
int sum = sumBlock(20, 30);

4.把block当做参数传入函数

//把代码块作为函数参数
void blockFunction(int (^myBlock)(int, int))
{
    int sum = myBlock(10,20);
    NSLog(@"fun_sum = %d", sum);
}  

5.在代码块中使用局部变量和全局变量

在block中可以和对全局变量进行访问和修改,但对局部变量只可以访问,若想修改的话,我们可以在声明局部变量的时候加上关键字__block

代码如下

__block int blockVar = 0;

 

简单理解Objective-C中的Block

标签:

原文地址:http://www.cnblogs.com/xiguain/p/4757226.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!