美文网首页
block 原理总结

block 原理总结

作者: iOS坚持者 | 来源:发表于2019-06-22 00:37 被阅读0次

block 对变量的引用:

  • 局部变量,传递的是值,因为局部变量可能在 block 执行之前就被销毁,所以传递的是值
  • 局部静态变量,传递的是指针
  • 全局静态变量,全局变量,不需要传递,因为在全局区,所以在哪里都可以访问的到
  • __block 变量,传递的是结构体指针,__block可以修饰局部变量
  • 属性和实例变量,传递的是 self

存储位置

在 ARC 下只访问局部变量的 block 会放在栈上,但是 ARC会在以下情况下自动 copy 到堆上
1、block 作为函数返回值时
2、block 用 strong 修饰时,ARC 对象默认修饰符为 strong
3、block作为Cocoa API中方法名含有usingBlock的方法参数时
4、作为GCD API的方法参数时

要点

  • 没有访问局部变量的 block 会放在全局区

  • 不能把堆上的 block 拷贝到栈上,可以把堆上的 block 移至 全局区

  • 引用全局变量、全局静态变量、局部静态变量:Block 在全局区,属于 GlobalBlock

  • 引用普通外部变量,用 copy,strong 修饰的 Block 就存放在堆区,属于 MallocBlock;用 weak 修饰的Block 存放在栈区,属于 StackBlock

block 块引用对象时,copy函数会将person地址传入_Block_object_assign函数,_Block_object_assign中对Person对象进行强引用或者弱引用
无论如何block内部中对__block修饰变量生成的结构体都是强引用,结构体内部对外部变量的引用取决于传入block内部的变量是强引用还是弱引用
http://www.cocoachina.com/ios/20180628/23965.html
http://www.cocoachina.com/ios/20180628/23968.html

相关文章

  • iOS底层原理总结 - 探寻block的本质(一)

    iOS底层原理总结 - 探寻block的本质(一) iOS底层原理总结 - 探寻block的本质(一)

  • Block

    xx_cc iOS底层原理总结 - 探寻block的本质(一)iOS底层原理总结 - 探寻block的本质(二) ...

  • Objective-C的本质(6)——Block本质

    参考:iOS-Block本质iOS底层原理总结 - 探寻block的本质(一)iOS底层原理总结 - 探寻bloc...

  • OC block 原理总结

    本文重点总结 OC block 的原理,并带上一些例子,不讨论 block 的写法和应用。 block 的本质总结...

  • iOS Block 部分一

    主要讲解 Block 的底层实现原理; Block部分一Block部分二Block部分三Block知识点总结 基础...

  • 探寻block的本质

    转自:探寻block的本质拓展:探寻OC对象的本质iOS底层原理总结 - 关联对象实现原理iOS底层原理总结 - ...

  • block 原理总结

    block 对变量的引用: 局部变量,传递的是值,因为局部变量可能在 block 执行之前就被销毁,所以传递的是值...

  • OC中block底层原理总结(下)

    关于OC中block的本质结构、block的变量捕获方式请查看OC中block底层原理总结(上)需要先看懂上篇文章...

  • Block 底层原理总结

    1. Block 本质 现在我们来实现一个最简单的BlockA 通过clang命名转化成C++源码:xcrun -...

  • iOS开发之Block原理探究

    Block概述 Block本质 Block调用 Block分类 Block循环引用 Block原理探究 Block...

网友评论

      本文标题:block 原理总结

      本文链接:https://www.haomeiwen.com/subject/tiopbqtx.html