zoukankan      html  css  js  c++  java
  • 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);
                  }
                  
              }];


  • 相关阅读:
    storm概述
    Mac下python路径
    Frida的安装
    Mac上安装多版本python的手工处理方式
    idea下编写shell脚本并执行
    CTF PWN专用虚拟机
    二叉树输入与存储的问题
    逆向推荐博客(持续更新)
    Kali 爬坑日记
    官宣:从windos服务器迁移到linux
  • 原文地址:https://www.cnblogs.com/lovemargin/p/10577726.html
Copyright © 2011-2022 走看看