题目:事例分析Block在ARC和MRC情况下的使用。
typedef void(^eBlock)(void);
/*
栈:函数体中定义的自动变量 系统提供的功能,特点是快速高效,缺点是有限制,数据不灵活 由编译器自动分配释放
堆:用malloc,calloc,realloc等分配内存的函数分配得到的就是在堆上 是函数库提供的功能,特点是灵活方便,数据适应面广泛,但是效率有一定降低。一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收
以下代码在arc中有问题吗?
arc 没问题
mrc 此种写法会有内存安全隐患 直接返回使用 return b;
i和b 均为局部变量 出了作用域会被释放
解决方案:
返回前使用 Block_copy
使用后释放 Block_release
网上错误答案:return [b