关于Block一些思考

2016-08-25  本文已影响28人  践行者

本质

一个block本质上就是一个函数指针,即那个代码快的内存地址;捕获上下文变量的内存块(结构体或者类)

定义

<#returnType#> (^<#blockName#>) (<#parameterTypes#>) = ^ (<#parameters#>) {
<#statements#>
};
returnType : 返回值类型
blockName : block命名
parameterTypes : 参数类型
parameters : 参数

内存管理

在ARC中, 外部变量存在堆中, 这个变量在Block块内与在Block块外地址相同;外部变量存在栈中, 这个变量会被copy到为Block代码块所分配的堆中;

在MRC中, 外部变量存在堆中, 这个变量在Block块内与Block块外相同;外部变量存在栈中, 这个变量会被copy到为Block代码块所分配的栈中;

在ARC中, 外部变量存在堆中, 这个变量在Block块内与Block块外地址相同; 外部变量存在栈中, 这个变量会被转移到堆区, 不是复制, 是转移.

在MRC中, 外部变量存在堆中, 这个变量在Block块内与Block块外地址相同;外部变量存在栈中, 这个变量在Block块内与Block块外地址相同;

参考

http://www.zhihu.com/question/30779258

上一篇 下一篇

猜你喜欢

热点阅读