iOS 三种全局 栈区 堆区Block小小解读

从2015年接触block就只会用 (还是抄袭别人的)就没真正掌握过这个东西

a,

block是啥?

b,

哪三种block?

------------------------------------------------------------------------------------------------------------------

我赶脚自己个开始用block就是用于界面反相传值,比代理少一些代码。

后来发现一些网络的封装,回调里用到这个东西,挺方便。

代码块Block是苹果在iOS4开始引入的对C语言的扩展,用来实现匿名函数的特性,Block是一种特殊的数据类型,其可以正常定义变量、作为参数、作为返回值,特殊地,Block还可以保存一段代码,在需要的时候调用,目前Block已经广泛应用于iOS开发中,常用于GCD、动画、排序及各类回调

注: Block的声明与赋值只是保存了一段代码段,必须调用才能执行内部代码

=====================================================================================

block声明

typedef 用这个使用更方便 格式不能理解就先死记硬背 也许过段时间无师自通了  不知道大家在学习新技术或者新本领的时候有没有这种感受 之前很难理解吃透的东西 不久的某一天就能恍然大悟

block定义

有参无参 返回值有参无参

block调用(自己尝试着恍然大悟吧)

block内存管理 循环引用(自己尝试着恍然大悟吧)

三种block

block的三种类型:全局块、栈块、堆块。

根据block在内存中的位置,block被分成三种类型:

类型 内存位置 介绍
__NSStackBlock__ 栈区 栈内有效,出栈后销毁。
__NSMallocBlock__ 堆区 copy到堆空间上。可以在定义的那个范围之外使用。
__NSGlobalBlock__ 全局区 不捕捉任何外部变量,全部信息在编译器就已确定。

iOS 三种全局 栈区 堆区Block小小解读

iOS 三种全局 栈区 堆区Block小小解读

自己写的加上学习别人的一点也不详细 时间紧 稍后会继续补充

相关文章: