iOS Stack

Block

2017-09-08  本文已影响10人  de7e01056dd4
什么是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技巧与底层解析

上一篇 下一篇

猜你喜欢

热点阅读