OC学习笔记10--Block的概念与使用方式

#import <Foundation/Foundation.h>

// 利用typedef 方便定义Block类型变量
typedef int (^SumBlo)(int,int);
typedef SumBlo (^GetBlo)(SumBlo);

int main()
{
	
	int outA=5,sum;
	//变量声明带上__block表明在Block中可修改该变量
	__block outB=10;
	
	SumBlo sumBlo=^(int a,int b)
	{
		return a+b;
	};
	
	// 该Block参数为另一个Block类型,返回值也是一个Block类型
	GetBlo getBlo=^(SumBlo sb)
	{
		//Block内可访问外部局部变量,
		//但是只能修改以__block声明的外部局部变量
		outB=sb(outA,outB);
		return sb;
	}
	
	
	// 通过变量名调用Block,执行Block中的代码段,并获得返回值
	SumBlo sumBlo2=getBlo(sumBlo);
	BOOL b=sumBlo2==sumBlo;
	
	sum=sumBlo2(outA,outB);
	
	NSLog(@"sumBlo2_equals_sumBlo=%d,outA=%d,outB=%d,sum=%d",b,outA,outB,sum);

	return 0;
}





Block: 
概念:封装了一段待执行的代码段,该代码段可以有形参和返回值,
也可以作为其他函数、方法或Block的参数或返回值,
使用Block类型变量调用后执行代码段;
代码形式:
^(形参列表)
{
代码段...
return XXX;
};
Block类型变量:
类似指向函数的指针,指向一个Block,
通过 变量名(参数) 方式执行Block中的代码段;
声明方式:
返回值类型 (^变量名)(参数类型);
例: void (^myBlock)(int,NSString *);
利用typedef 方便声明:
typedef void (^MyBlo)(int,NSString *);
MyBlo blo=^(int a,NSString *str)
{
.....
};

Block代码段中访问外部变量:
可以访问外部局部变量,
默认情况无法修改外部局部变量,
外部局部变量声明中加上 __block 即可在Block中修改;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值