关于Block的碎片整理

iOS中Block内存管理分为三种:

  • NSGloabBlock
  • NSStackBlock
  • NSMallocBlock

1: MRC中使用的__block可以表示若引用,ARC中要使用__weak修饰表示弱引用.

  • NSGloabBlock:retain,copy,release 不会正价引用计数
  • NSStackBlock:retain.release ,copy不会改变引用计数,copy可以
  • NSMallocBlock:位于堆区,retain,release.引用计数改变.

注意:防止block循环引用,正确使用weak 和__block的修饰
验证总结如下:

  • 作用域内定义的block 没有引用外部变量的在全局区 引用了外部变量 在堆区
  • block作为参数 如果引用了外部变量 是在栈区,未引用还在全局区
  • 全局区的block 不会被拷贝到堆区,无论是外部指针引用 还是copy 操作 都没有任何改变
  • 只有栈区的block 如果被外部指针引用 或者copy 才会被拷贝到堆区


    WechatIMG361.jpeg
WechatIMG362.jpeg

你可能感兴趣的:(关于Block的碎片整理)