OC底层 - block放入堆中

之前已经讲过, block有三个类型 NSStackBlock 、NSMallocBlock 、 NSGlobalBlock

  • NSStackBlock是放在栈中, 访问了auto变量;
  • NSGlobalBlock是放在数据区中, 没有访问auto变量;
  • NSMallocBlock是放在堆中, 是NSStackBlock类型的block调用了copy方法后变换过来的;

什么样的条件才会被放入堆中?

  1. block作为函数返回值时;
  2. 将block赋值给__strong指针时;
  3. block作为Cocoa API中方法名含有usingBlock的方法参数时;
  4. block作为GCD API的方法参数时;

猜你喜欢

转载自blog.csdn.net/Batac_Lee/article/details/110470586