• 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);
          }];

          ​​
      • 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);
                  }
                  
              }];


  • 相关阅读:
    hive: insert数据时Error during job, obtaining debugging information 以及beyond physical memory limits
    hadoop性能调优
    mysql主键,外键,索引
    Hive语法
    Hbase配置java客户端
    Hive命令及操作
    sqoop:mysql和Hbase/Hive/Hdfs之间相互导入数据
    mysql字符设置
    linux及hadoop修改权限
    Scalaz(55)- scalaz-stream: fs2-基础介绍,fs2 stream transformation
  • 原文地址:https://www.cnblogs.com/lovemargin/p/10577726.html
Copyright © 2020-2023  润新知