iOS学习ALVIN-YANG的iOS开发日常

OC中Block的探究

2016-01-17  本文已影响157人  青木KON

Block简介

// Block声明:返回值(^Block变量名)(Block参数类型)
void(^block1)();
void(^block2)(NSInteger);
//Block三种定义方式
void(^block1)(int a) = ^(int a) {
  };
int(^block2)(int a) = ^int(int a){
  return 1;
};
void(^block3)() = ^ {
};
  block2(7);

基础探究

 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;
};

定义一个最简单的Block



使用clang命令
clang -rewrite-objc main.m 得到一个.cpp文件



找到输出位置就会看到什么是Block
定义完Block后其实是创建了一个函数,在创建结构体的时候把函数的指针一起传给了Block,所以之后可以拿出来调用

block的内存管理


文章参考@Joshua Shen@峥吖
先写到这里后期还会补充

上一篇 下一篇

猜你喜欢

热点阅读