美文网首页iOS 开发每天分享优质文章
【高级iOS】block部分原理讲解

【高级iOS】block部分原理讲解

作者: 找不到工作的iOS | 来源:发表于2018-11-13 03:28 被阅读84次
  • 首先感谢八点钟学院分享宝贵的知识!
  • 为什么是部分,因为阅读过block源码,很多要结合clang编译成c++来反复推敲和解读,用文字实在不好组织表达。

1.探索

block是一个oc对象吗?

  • 第一种情况,一个普通block,并且在block内部使用一个外部的变量
  • 注意_xxx _为本类,__xxx为父类,是不同的类
    image.png
  • 在原block前加个weak修饰看看,嗯变成栈区block了


    image.png
  • 第三种,一个正常block,也没有外部的参数和weak修饰,带了个自己的参


    image.png
  • 最后得知block是一个oc对象,并且有三种集成体系


    image.png
  • 从英语命名中可以推测,三种block分别在堆区、栈区、全局区(事实也是如此)

2 .copy、strong、weak修饰的block,在有没有外部变量的情况下,来打印出他们所属的类是什么

  • 定义三种不同修饰符的block,来细究


    image.png
  • 在没有外部变量的情况下,三种block都是globalBlock


    image.png
  • 一般而言,在函数外打印weak修饰的变量是nil,但是block虽然是weak修饰,在函数外依旧有值因为我们从上面得知此时的block属于global全局区

    image.png
  • 如果block有外部变量有两种情况

  • 1.全局变量、全局静态变量、局部静态变量 ,无论使用哪一种都在全局区globalBlock


    image.png
    1. 普通外部变量,copy、strong修饰的block在堆区mallocBlock,weak修饰的block在栈区stackBlock,并且在当前函数外调用weak修饰的block会崩溃,因为此block在栈区!
      image.png
      image.png

3. 结论

  • 1.没有外部变量的情况下,block属于全局区 globalBlock
  • 2 有外部变量的情况下
    2.1 无论全局变量、全局静态变量、局部静态变量,block依然在全局区 globalBlock
    2.2 普通外部变量 ,copy、strong修饰的block在堆区mallocBlock,weak修饰的block在栈区stackBlock
    本质:有普通外部变量的block,它创建后就是在栈区,只是copy、strong修饰的block会把它从栈区移动到堆区,而weak不会。
    在arc下copy、strong修饰的block没有区别

相关文章

  • 【高级iOS】block部分原理讲解

    首先感谢八点钟学院分享宝贵的知识! 为什么是部分,因为阅读过block源码,很多要结合clang编译成c++来反复...

  • iOS Block 部分一

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

  • iOS Block用法与实现原理

    最近在看Block原理的时候看了一篇文章iOS Block用法和实现原理,并且对照了《Objective-C高级编...

  • iOS-2 Block

    block块 系列文章: iOS Block浅浅析 - 简书 iOS Block实现原理 iOS Block __...

  • iOS 题目详解 部分三

    主要讲解Block 内部使用strongSelf的理由和用法 iOS 题目详解 部分一iOS 题目详解 部分二...

  • iOS Block存储域及循环引用

    系列文章:iOS Block概念、语法及基本使用iOS Block实现原理iOS Block __block说明符...

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

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

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

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

  • Block

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

  • iOS Block __block说明符

    系列文章:iOS Block概念、语法及基本使用iOS Block实现原理iOS Block存储域及循环引用 上一...

网友评论

    本文标题:【高级iOS】block部分原理讲解

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