【Objective_C学习笔记】Block的使用
2015-11-30 18:28
691 查看
Block的介绍
用于对象之间的通信,通信方式是1对1;
是一个匿名的函数代码块,此代码块可以作为参数传递给其他对象;
可以把block当做Objective-C的匿名函数,block是OC中的一种数据类型,
Block的格式
说明:如果没有参数,等号后面参数列表的()可以省略。
Block 的使用
Block的定义
运行结果:
View Code
运行结果:
ps:目前知道的就是这些,欢迎补充
用于对象之间的通信,通信方式是1对1;
是一个匿名的函数代码块,此代码块可以作为参数传递给其他对象;
可以把block当做Objective-C的匿名函数,block是OC中的一种数据类型,
^是block的特有标记。
Block的格式
(返回类型)(^block名称)(参数类型)=^(参数列表){代码实现};。
说明:如果没有参数,等号后面参数列表的()可以省略。
Block 的使用
Block的定义
- (void)viewDidLoad { [super viewDidLoad]; //1、无参数、无返回值的block的定义和使用 void (^myBlock1)() = ^{ NSLog(@"block无返回值,无参数"); }; myBlock1(); //2、无参数、有返回值的block的定义和使用 int (^myBlock2)() = ^{ return 10; }; NSLog(@"myBlock2的返回值是%d", myBlock2()); //3、有参数,有返回值的block定义和使用 int (^myBlock3)(int, int) = ^(int a, int b) { return a + b; }; NSLog(@"myBlock3的返回值是%d", myBlock3(5, 8)); }
运行结果:
#import "ViewController.h" @interface ViewController () @property (nonatomic,copy) void (^myBlock)(); //block作为属性 @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //1、无参数、无返回值的block的定义和使用 void (^myBlock1)() = ^{ NSLog(@"block无返回值,无参数"); }; myBlock1(); //2、无参数、有返回值的block的定义和使用 int (^myBlock2)() = ^{ return 10; }; NSLog(@"myBlock2的返回值是%d", myBlock2()); //3、有参数,有返回值的block定义和使用 int (^myBlock3)(int, int) = ^(int a, int b) { return a + b; }; NSLog(@"myBlock3的返回值是%d", myBlock3(5, 8)); //4、block作为方法的参数,可以用来封装代码块。 [self testBlockAsParam:^{ NSLog(@"block作为testBlockAsParam的参数"); }]; //5、block作为属性 [self setMyBlock:^{ NSLog(@"block作为属性"); }]; NSLog(@"%@",self.myBlock); self.myBlock();//block作为属性的调用 //6、访问外部变量 //block直接访问外部变量 默认是将其复制到其数据结构中来实现访问的,但是不能更改这变量的值,因为在block中这变量是const类型。 //对于访问用__block修饰的外部变量,block内是复制其地址实现访问的,block内可以修改变量的值。 int a = 5; __block int b = 10; NSLog(@"a = %d ,地址 = %p, b = %d,地址 = %p", a, &a, b, &b); void (^myBlock4)() = ^{ b = 15; NSLog(@"a = %d ,地址 = %p, b = %d,地址 = %p", a, &a, b, &b); }; myBlock4(); NSLog(@"a = %d ,地址 = %p, b = %d,地址 = %p", a, &a, b, &b); } - (void) testBlockAsParam: (void (^)()) block { block(); //执行block内部代码 }
View Code
运行结果:
ps:目前知道的就是这些,欢迎补充
相关文章推荐
- Object类学习笔记
- [Objective-C]关联(objc_setAssociatedObject、objc_getAssociatedObject、objc_removeAssociatedObjects)
- C++中的临时对象temporary object
- [转]JSONObject与JSONArray的使用
- No package 'gobject-introspection-1.0' found
- ObjectInputStream和ObjectOutputStream
- net.sf.json.JSONArray & net.sf.json.JSONObject
- [Objective-C]__bridge,__bridge_retained和__bridge_t
- OC桥接转换
- AutoCAD2008+objectARX二次开发
- IOS 开发 【objective-c 基础1】
- PS: DeepProposal: Hunting Objects by Cascading Deep Convolutional Layers__ICCV2015
- PS:mproving Object Detection With Deep Convolutional Networks via Bayesian Optimization..___CVPR2015
- Objective-C NSData与实现NSCoding协议进行序列化和反序列化
- 十分钟让你明白Objective-C的语法(和Java、C++的对比)
- PS:Hypercolumns for Object Segmentation and Fine-Grained Localization__CVPR2015
- request.getParameterMap()返回的value是Object[],数组
- JavaScript基础篇,Object类型
- 1.引用 Microsoft Excel 12.0 object library 和 ActiceX Data Objects 2.8 library.
- iOS开发之Objective-C与JavaScript的交互