1. 概述
block : Object - C 对于闭包的实现 .
闭包 = 一个函数 (或是指向函数的指针) + 该函数执行的外部的上下文变量 (自由变量)
2. 对 block 的理解
可以嵌套定义, 定义 block 方法和定义函数方法相似
block 可以定义在方法外部内部或外部
只有调用 block 时候 才会执行 { } 内的代码
本质是对象, 使代码高聚合
3.block 的使用方法
无参数无返回值
- void (^myBlock)();
- ?myBlock = ^( ) {
- NSLog(@"1111111");
- };
- myBlock();???
- ?
有参数无返回值
- void (^myBlock)(NSString *str);
- myBlock = ^(NSString *str){
- ? NSLog(@"%@",str);
- };
- myBlock(@"1111111");
- ?
有参数有返回值
- self.myBlock = ^int(int x, int y) {
- return x+y;
- };
- self.myBlock(2, 5);
- ?
无参数有返回值
- self.myBlock = ^int{
- return 20;
- };
- self.myBlock();
4.block 作为 OC 的方法参数
无参数传递的 block
- - (void)test:(void(^)())testBlock{
- testBlock();
- }
- ?
- // 调用方式
- [self test:^{
- NSLog(@"aaaa");
- }];
- ???
有参数传递的 block
- - (void)test:(void(^)(NSString *str))testBlock{
- testBlock(@"aaaa");
- }
- // 调用方式
- [self test:^(NSString *str) {
- NSLog(@"%@",str);
- }];
- ??
5.block 回调
block 回调在项目中经常用到, 小编就 AFNetworking 网络请求回调里摘取部分举例.
- //.h
- ??
- - (nullable NSURLSessionDataTask *)POST:(NSString *)URLString
- parameters:(nullable id)parameters
- success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success
- failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure DEPRECATED_ATTRIBUTE;
- ?
- ?
- //??.m
- ?
- NSURLSessionDataTask *sessionTask = [manager POST:URLString parameters:parameters success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
- if (success) {
- success(responseObject);
- }
- } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
- if (failure) {
- failure(error);
- }
- }];
来源: http://www.bubuko.com/infodetail-2995950.html