iOS 技术篇:从使用到了解block底层原理 (一)
- 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); }];
- 无参数传递的block
- 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); } }];
- block回调在项目中经常用到,小编就AFNetworking网络请求回调里摘取部分举例.