iosblock在堆和栈中的区别?
代码块Block是苹果在iOS4开始引入的对C语言的扩展,用来实现匿名函数的特性,Block是一种特殊的数据类型,其可以正常定义变量、作为参数、作为返回值,特殊地,Block还可以保存一段代码,在需要的时候调用,目前Block已经广泛应用于iOS开发中,常用于GCD、动画、排序及各类回调
注: Block的声明与赋值只是保存了一段代码段,必须调用才能执行内部代码
block的三种类型:全局块、栈块、堆块。
根据block在内存中的位置,block被分成三种类型:
类型内存位置介绍__NSStackBlock__栈区栈内有效,出栈后销毁。__NSMallocBlock__堆区copy到堆空间上。可以在定义的那个范围之外使用。__NSGlobalBlock__全局区不捕捉任何外部变量,全部信息在编译器就已确定。