Block本质

2019-10-09  本文已影响0人  程序猿_K

Block本质

//block的底层实现就是__main_block_impl_0结构体
struct __main_block_impl_0 {
struct __block_impl impl;
struct __main_block_desc_0* Desc;
 __Block_byref_age_0 *age; // by ref
};
struct __block_impl {
  void *isa;//OC对象标志性指针
  int Flags;
  int Reserved;
  void *FuncPtr;//block执行的代码地址
};
static struct __main_block_desc_0 {
size_t reserved;
size_t Block_size;
//下面两个捕获非Object对象不会生成,用来内存管理
void (*copy)(struct __main_block_impl_0*, struct __main_block_impl_0*);//实现强弱引用
void (*dispose)(struct __main_block_impl_0*);//release操作
};
struct __Block_byref_age_0 {
  void *__isa;
__Block_byref_age_0 *__forwarding;
 int __flags;
 int __size;
 int age;
};

Block的变量捕获

变量捕获

Block类型

1.block有3种类型,可以通过调用class方法或者isa指针查看具体类型,最终都是继承自NSBlock类型

上一篇 下一篇

猜你喜欢

热点阅读