美文网首页面试
iOS block三种类型

iOS block三种类型

作者: 灬小五灬 | 来源:发表于2021-06-12 16:17 被阅读0次

block有如下三种类型:

__NSGlobalBlock __ ( _NSConcreteGlobalBlock )(全局区内存)

__NSStackBlock __ ( _NSConcreteStackBlock )(栈区内存)

__NSMallocBlock __ ( _NSConcreteMallocBlock )(堆区内存)

block在MRC和ARC环境下分别出现这三种类型的情况

MRC环境:

__NSGlobalBlock:没有访问外部auto变量,如果访问了外部static或者全局变量也是这种类型

image

__NSStackBlock:访问了外部auto变量

image

__NSMallocBlock:__NSStackBlock类型调用了copy方法

image

上面就是MRC环境下的三种类型,如果对__NSGlobalBlock和__NSMallocBlock分别调用copy会是什么情况呢?

__NSGlobalBlock调用copy还是__NSGlobalBlock类型,__NSMallocBlock调用copy则引用计数+1

再看下ARC环境下的三种类型:

__NSGlobalBlock:和MRC环境一样,不再累赘

__NSStackBlock:访问了外部变量,但没有强引用指向这个block,而是直接打印出来

image

__NSMallocBlock:ARC环境下只要访问了外部auto变量而且有强引用指向该block(或者作为函数返回值)就会自动将__NSStackBlock类型copy到堆上

image

相关文章

  • Block的类型和循环引用

    本篇文章中,我们主要来探讨iOS中的Block。 Block的类型 Block主要有三种类型分别为NSGlobal...

  • iOS block 为什么官方文档建议用 copy 修饰

    一、block 的三种类型block 三种类型:全局 block,堆 block、栈 block。全局 block...

  • iOS Block

    Block block 类型 block主要有三种类型 NSGlobalBlock:全局block,存储在全局区 ...

  • iOS 常见面试题 -- block

    一、block的本质 二、block的类型 block 有三种类型分别如下: 如何区分block的类型 三、blo...

  • Block实现原理

    主要介绍block的类型和底层分析 block类型 block主要由三种类型 NSGlobalBlock:全局bl...

  • OC底层-block底层原理探究

    一、block的常见三种类型 1.1 NSGlobalBlock NSGlobalBlock 全局类型block,...

  • iOS block浅析

    iOS开发中经常会使用block结合gcd来完成多线程编程,block也属于对象,主要有三种类型:1、 _NSCo...

  • Block原理分析

    block类型 我们都知道block有三种类型:NSGlobalBlock、NSStackBlock、NSMall...

  • iOS底层-Block底层原理

    block类型 block主要有三种类型 __NSGlobalBlock__:全局block,存储在全局区 此时的...

  • 关于block

    1、三种类型的block介绍 根据Block在内存中的位置分为三种类型NSGlobalBlock,NSStackB...

网友评论

    本文标题:iOS block三种类型

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