您知道Objective-C中一个很重要的数据类型Block的基本用法吗?
你知道Objective-C中一个很重要的数据类型Block的基本用法吗???
Block是OC的一个数据类型,是苹果官方特别推荐使用的一种类型,因为她效率高,在iOS开发中会发现到处都是Block的踪影。苹果官方建议尽量多用Block。
一,Objective-C关于Working With Blocks的地址和一位哥们的翻译地址
1.英文文档档:https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/ProgrammingWithObjectiveC.pdf
2.翻译:http://www.cnblogs.com/qiqibo/p/3429913.html
二,关于block的简介
1.Block的作用是封装代码,就是用来保存代码的,这段代码你想在什么时候调用都可以,即可以在任何时候执行。
2.Block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值。
3.在多线程,异步任务,集合遍历,集合排序,动画转场用的很多。
三,自己写的一点基础玩意~
#import<Foundation/foundation.h> int mian() { //block用来保存一段代码 //block的标志:^ /* block跟函数很像: 1.可以保存代码 2.有返回值 3.有形参 4.调用方式一样 */ //定义block变量 //如果block没有形参,可以省略^后面的小括号 void (^myblock )( ) = ^{ NSLog(@"-----------------"); NSLog(@"-----------------"); }; int (^sumblock)(int,int) = ^(int a,int b){ return a+b; }: int c = sumblock(10,11); // 利用block变量调用block内部的代码 return 0; } //用一个block输出n条横线 void (^LineBlock)(int) = (int n) { for (int i = 0; i<n;i++){ NSLog(@"------------------"); } }; LineBlock(5); //使用typedef定义block类型 typedef int (*Sump)(int, int); typedef int (^MyBlock)(int,int); MyBlock sumBlock; sumBlock = ^(int a,int b){ return a + b; }: MuBlock minusBlock = ^(int a,int b){ return a - b; }; MyBlock multiplyBlock = ^(int a; int b) { return a * b; }; NSLog (@"%d-%d-%d,"multiplyBlock( 2, 4 ),sumBlock( 10, 9 ),minusBlock(10 , 8)); int a = 10; __block int b = 20; void (^block)(); block = ^{ //block内部可以访问外面的变量 //NSLog(@"a = %d",a); //默认情况下,block内部不能修改外面的局部变量 //a = 20 //给局部变量加上__block关键字,这个局部变量可以在block内部修改 b = 25; }; block(); return 0; }
四,总结:block要掌握的东西
1.如何定义block变量
int(^sumBlock)(int,int); void (^myBlock)();
2.如何利用block封装代码
^(int a,int b){ return a - b; }; ^(){ NSLog(@"--------------") }; ^{ NSLog(@"--------------") }:
3.block访问外面变量
*block内部可以访问外部变量
*默认情况下,block内部不能修改外面的局部变量
*给局部变量加上___block关键字,这个局部变量就可以在block内部修改
4.利用typedef定义block类型
typedef int (^MyBlock)(int, int);
以后就可以利用MyBlock这种类型来定义block变量
MyBlock block; MyBlock b1, b2; b1 = ^(int a; int b){ return a - b; }; MyBlock b3 = ^(int a, int b){ return a - b; };