iOS闭包block理解

来源:互联网 发布:万影数据 编辑:程序博客网 时间:2024/05/16 10:06

这几天打算把block有关的东西梳理下,也算是自我学习下。
block定义

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. */ };

实际上block就这俩东东,下面举个例子

int main(int argh,const chat * argue[]){void (^block)() = ^{ printf("Hello World");};block();return 0;}

定义完之后,其实就是创建了一个函数,在创建结构体的时候把函数的指针一起传给了block,所以之后拿出来可以调用。

再看值捕获的问题

**`int main(int arc,const chatr*argv[]){    int a=10;    void(^block)()=^{printf("a=%d",a);};    block();    return 0;}`**

定义block 的时候,变量a的值就传递到了block的结构体中,仅仅是值传递,所以在block中修改a的值是不会影响到外面的a 的变量的,如果加了_blocl前缀,并不是直接传递a的值了,而是把a的地址传过去了,所以在block内部便可以修改到外面的变量了

简单来说就是匿名函数

Block 两个作用,一个在处理异步问题的时候,例如HTTP请求,有点像javascript的回调,在得到回复的时候更新主线程,而不会占用主线程,比Delegate逻辑好看多了。另一个当你要返回多个值又懒得创建一个类的时。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 微信安装不上去怎么办 6s无法安装微信怎么办 苹果4微信版本低怎么办 新手机没有微信怎么办 新手机登陆微信怎么办 新号码被注册过怎么办 微信注册不了怎么办啊 苹果4铃声不响怎么办 苹果6黑屏没反应怎么办 苹果7卡机黑屏了怎么办 苹果7手机铃声小怎么办 支付宝发现套现怎么办 空调滴水管断了怎么办 地漏下水管断了怎么办 脸上长白色糠疹怎么办 腋下长白色的毛怎么办 饥荒电羊死光了怎么办 6s储存空间虚满怎么办 大胸下垂穿婚纱怎么办 美团签约成功后怎么办 拍婚纱照笑不出来怎么办 长得丑拍婚纱照怎么办 失恋了怎么办才能最快走出来 眼镜大了往下掉怎么办 眼镜带着往下掉怎么办 眼镜腿松了怎么办妙招 眼镜框大了总掉怎么办 吃不下饭恶心想吐怎么办 买到苹果翻新机怎么办 欠装修款不给怎么办 老板欠工资跑了怎么办 挖机老板欠工资怎么办 欠工程款耍赖不给怎么办 辞工后不给工资怎么办 工伤仲裁后不给怎么办 离职后不给工资怎么办 离职了不发工资怎么办 饭店欠工资不给怎么办 单位欠工资不给怎么办 离职后工资不发怎么办 暑假工不给工资怎么办