iOS开发中经常会使用block结合gcd来完成多线程编程,block也属于对象,主要有三种类型:
1、 _NSConcreteStackBlock ,存储在栈上;
2、_NSConcreteGlobalBlock,存储在程序的数据区域(text段);
3、_NSConcreteMallocBlock,存储在堆上。
下面分别介绍一下这三种类型的block,block在arc和非arc的模式下会有些需要注意的地方:
- NSGlobalBlock:在block内部没有引用任何外部变量
1 | void (^globalBlock) () = ^ () { |
对NSGlobalBlock的retain、copy、release操作都无效。
- NSStackBlock:在block内部引用外部变量
先讨论下MRC模式: