zoukankan      html  css  js  c++  java
  • 带__Block和不带的差别

    带了__block

    #pragma clang assume_nonnull end
    
    struct __Block_byref_i_0 {
      void *__isa;
    __Block_byref_i_0 *__forwarding;
     int __flags;
     int __size;
     int i;
    };
    
    struct __main_block_impl_0 {
      struct __block_impl impl;
      struct __main_block_desc_0* Desc;
      __main_block_impl_0(void *fp, struct __main_block_desc_0 *desc, int flags=0) {
        impl.isa = &_NSConcreteStackBlock;
        impl.Flags = flags;
        impl.FuncPtr = fp;
        Desc = desc;
      }
    };
    static int __main_block_func_0(struct __main_block_impl_0 *__cself, int index) {
    
            index += 1;
            printf("====> %d
    ",index);
            return index;
        }
    
    static struct __main_block_desc_0 {
      size_t reserved;
      size_t Block_size;
    } __main_block_desc_0_DATA = { 0, sizeof(struct __main_block_impl_0)};
    int main () {
        __Block_byref_i_0 i = {(void*)0,(__Block_byref_i_0 *)&i, 0, sizeof(__Block_byref_i_0), 10};
        int (*testBlk)(int) = ((int (*)(int))&__main_block_impl_0((void *)__main_block_func_0, &__main_block_desc_0_DATA));
        printf("---> %d
    ",((int (*)(__block_impl *, int))((__block_impl *)testBlk)->FuncPtr)((__block_impl *)testBlk, (i.__forwarding->i)));
        return 0;
    }
    #import <Foundation/Foundation.h>
    
    int main () {
        int __block i = 10;
        int (^testBlk)(int) = ^int(int index){
            index += 1;
            printf("====> %d
    ",index);
            return index;
        };
        printf("---> %d
    ",testBlk(i));
        return 0;
    }

    没有带__block

    struct __main_block_impl_0 {
      struct __block_impl impl;
      struct __main_block_desc_0* Desc;
      __main_block_impl_0(void *fp, struct __main_block_desc_0 *desc, int flags=0) {
        impl.isa = &_NSConcreteStackBlock;
        impl.Flags = flags;
        impl.FuncPtr = fp;
        Desc = desc;
      }
    };
    static int __main_block_func_0(struct __main_block_impl_0 *__cself, int index) {
    
            int addIndex = index + 1;
            printf("====> %d
    ",addIndex);
            return addIndex;
        }
    
    static struct __main_block_desc_0 {
      size_t reserved;
      size_t Block_size;
    } __main_block_desc_0_DATA = { 0, sizeof(struct __main_block_impl_0)};
    int main () {
        int i = 10;
        int (*testBlk)(int) = ((int (*)(int))&__main_block_impl_0((void *)__main_block_func_0, &__main_block_desc_0_DATA));
        printf("---> %d
    ",((int (*)(__block_impl *, int))((__block_impl *)testBlk)->FuncPtr)((__block_impl *)testBlk, i));
        return 0;
    }
    #import <Foundation/Foundation.h>
    
    int main () {
        int i = 10;
        int (^testBlk)(int) = ^int(int index){
            int addIndex = index + 1;
            printf("====> %d
    ",addIndex);
            return addIndex;
        };
        printf("---> %d
    ",testBlk(i));
        return 0;
    }
  • 相关阅读:
    JavaScript是如何工作的:深入类和继承内部原理 + Babel和TypeScript 之间转换
    JavaScript的工作原理:解析、抽象语法树(AST)+ 提升编译速度5个技巧
    如何保证MongoDB的安全性?
    SQLSERVER 中sp_who, sp_who2和sp_who3(转载)
    exec sp_spaceused如何只返回一个结果集(转载)
    c#静态构造函数 与 构造函数 你是否还记得?(转载)
    如何让.NET Core支持GB2312和GBK
    C#中用HttpWebRequest中发送GET/HTTP/HTTPS请求 (转载)
    ASP.NET Core读取AppSettings (转载)
    使用自定义端口连接SQL Server的方法(转载)
  • 原文地址:https://www.cnblogs.com/yuxiaoyiyou/p/11282221.html
Copyright © 2011-2022 走看看