黑马程序员——IOS基础——Block

------- android培训java培训、期待与您交流!

Block 封装了一段代码,可以在任何时候执行

Block可以作为函数参数或者函数的返回值,而起本身又可以带输入参数或返回值

多用于 多线程、异步任务、集合遍历、集合排序、动画转场等

block总结:

1.>定义block变量:

int (^sumBlock)(int ,int);

void (^myBlock)();

2.>利用block封装代码

^(int a,int b){

return a - b;

}

^{

NSLog(@"");

}

3.>block访问外部变量

block 内部可以访问外面的变量

默认情况下,block内部变量不能修改外面的局部

给局部变量加上__block关键字,这个局部变量就可以在block内部修改

4.>利用typedef定义block类型

typedef int (^MyBlock)(int,int);


//test3:利用typedef 简化声明定义block

typedef int (*SumP)(int,int);
typedef int (^MyBlock)(int,int);
int sum(int a,int b){
	return a+b;
}
void test4(){
	SumP p = sum;
	SumP p2 = sum;
	MyBLock = sumBlock;
	sumBlock = ^(int a,int b){
		return a+b;
	};
	MyBlock = minusBlock(^int a,int b){
		return a-b;
	};
	NSLog(@"%d - %d",sumBlock(10,9),minusBlock(10,5));
}


//test3:block修改外部的变量

void test3(){
	int a = 10;
	__block int b = 20;
	void (^block)();
	block=^{
		//block 内部可以访问外面的变量
		NSLog(@"a = %d",a);
		//默认情况下,block内部变量不能修改外面的局部
		a = 20;//这是不可以的
		//给局部变量加上__block关键字,这个局部变量就可以在block内部修改
		b = 25;
	};
	block();
}

//test2:有返回值,有形参的block

void test(){
	int (*sumpoint)(int,int) = sum;  //可以对比一下
	int d = p(10,13);


	int (^sumblock)(int,int)=^(int a,int b){
	    return a+b;
	}
	int c = sumblock(10,11);
	NSLog(@"%d",c);


	void (^lineBlock)(int) = ^(int n){
		for(int i=0;i<n;i++){
			NSLog(@"----------------");
		}
	};
	lineBlock(5);//输出五条线
	return 0;
}

//test1:没有返回值,没有形参的block

void test1(){
	//block 用来保存一段代码
	//block的标志: ^
	/*
	block跟函数很像:
	1.可以保存代码
	2.有返回值
	3.有形参
	4.调用方式一样
	*/
	//定义block变量
	void (^myblock)() = ^{  /^()  可以省略括号
		NSLog(@"----------");
		NSLog(@"----------");
	};
	//利用block变量调用block内部的代码
	myblock();
	//int a = 10;相似
	return 0;
}


------- android培训java培训、期待与您交流!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值