Block

作者: de7e01056dd4 | 来源:发表于2017-09-08 14:17 被阅读10次
什么是blocks

用一句话概括: 带有自动变量(局部变量)的匿名函数

block 深入剖析

执行clang -rewrite-objc Rewrite Objective-C source to C++

struct __block_impl {
  void *isa;  /*指向所属类的指针,也就是block的类型*/
  int Flags; /*标志变量,在实现block的内部操作时会用到*/
  int Reserved; /*保留变量*/
  void *FuncPtr;/*block执行时调用的函数指针*/
};
/* Revised new layout. */
struct Block_descriptor {
    unsigned long int reserved;
    unsigned long int size;
    void (*copy)(void *dst, void *src);
    void (*dispose)(void *);
};


struct Block_layout {
    void *isa;
    int flags;
    int reserved; 
    void (*invoke)(void *, ...);
    struct Block_descriptor *descriptor;
    /* Imported variables. */
};

使用MRC管理内存时,Block的内存管理需要区分是Global(全局),Stack(栈)和Heap(堆),在使用了ARC之后,苹果自动会将所有原本应该放在栈中的Block全部放到堆中,

block 和 weak 修饰符的区别

  • __block不管是ARC 还是MRC 模式下都可以使用,可以修饰对象,也可以修饰基本数据类型
  • __weak只能在ARC模式下使用,只能修饰对象,不能修饰基本数据类型
    block修饰的值,可以在block中被修改,weak 不可以
参考链接

Block技巧与底层解析

相关文章

  • iOS开发之Block原理探究

    Block概述 Block本质 Block调用 Block分类 Block循环引用 Block原理探究 Block...

  • block的使用

    定义block 返回类型 (^block名称)(参数) = ^(){block内容}; 调用block block...

  • Block 02 - __block

    Block 02 - __block __block 的作用 __block 可以解决 Block 内部无法修改 ...

  • iOS面试之Block大全

    Block Block内容如下: 关于Block 截获变量 __block修饰符 Block的内存管理 Block...

  • iOS面试之Block模块

    Block Block内容如下: 关于Block 截获变量 __block修饰符 Block的内存管理 Block...

  • iOS Block

    Block的分类 Block有三种类型:全局Block,堆区Block,栈区Block 全局Block 当Bloc...

  • iOS block 为什么官方文档建议用 copy 修饰

    一、block 的三种类型block 三种类型:全局 block,堆 block、栈 block。全局 block...

  • iOS开发block是用copy修饰还是strong

    Block分为全局Block、堆Block和栈Block1、在定义block没有引用外部变量的时候,block为全...

  • block 初探

    全局block, 栈block, 堆block

  • Block

    一、Block本质 二、 BlocK截获变量 三、__block 修饰变量 四、Block内存管理 五、Block...

网友评论

    本文标题:Block

    本文链接:https://www.haomeiwen.com/subject/xhlbrxtx.html