美文网首页
关于block

关于block

作者: 此页空白 | 来源:发表于2018-02-25 23:19 被阅读0次

block即代码块,将同一逻辑的代码放在一快区域中,使代码更简洁紧凑,易于阅读,而且它比函数使用更方便,代码更美观,因而广受开发者欢迎。block 只是 Objective-C 对闭包的实现,并不是 iOS 独有的概念,在 C++、Java 等语言也有实现闭包,名称不同而已

isa 指向实例对象,表明 block 本身也是一个 Objective-C 对象。block 的三种类型:_NSConcreteStackBlock、_NSConcreteGlobalBlock、_NSConcreteMallocBlock。

应用程序的内存分配:

程序区域.text区

数据区域.data区 _NSConcreteGlobalBlock,复制效果,什么也不做

堆区 _NSConcreteMallocBlock ,复制效果,引用计数增加,并且被block持有

栈区 _NSConcreteStackBlock  ,复制效果 从栈拷贝到堆区,并且被block持有

到目前为止,block例子使用的都是_NSConcreteStackBlock类,且都设置在栈上。实际并非全是这样,在记述全局变量的地方使用block语法时,生成的block为_NSConcreteGlobalBlock类对象。

void (^blk)(void)  = ^{printf("Global Block\n");};

int main() {

变量作用域结束时,栈上面的__block变量和Block也被废弃,复制到堆上的__block变量和Block在变量作用域结束时不受影响

__block变量用结构体成员变量__forwarding可以实现无论__block变量配置在栈还是堆上都能够正确的访问__block变量.

什么时候block将会从栈拷贝到堆

1,调用block的copy实例方法 2,block作为函数返回值返回 3,将block赋值给附有__strong修饰符id类型或者block类型的成员变量 4,方法名中含有usingBloc的cocoa框架方法或者GCD的api中传递block时

相关文章

  • iOS面试之Block大全

    Block Block内容如下: 关于Block 截获变量 __block修饰符 Block的内存管理 Block...

  • iOS面试之Block模块

    Block Block内容如下: 关于Block 截获变量 __block修饰符 Block的内存管理 Block...

  • 详细的探讨一下Block(讨论篇、基础篇、实质篇)

    章节目录 关于Block的讨论篇 Block的基础篇 Block的实质篇 讨论篇: 为什么要看Block? 为了更...

  • 关于block(4)

    关于block(4) 标签: iOS 技术 接上篇,我们继续探究block。 block的copy属性 研究到这里...

  • block

    一.关于block block是将函数及其执行上下文封装起来的对象。 __block_impl结构体为 block...

  • 关于Block

    转化前代码 用clang命令clang -rewrite-objc testBlockM.m 关注 isa:isa...

  • 关于Block

    1.Block基本用法: block声明返回值(^block变量名)(参数)void(^block)(); blo...

  • 关于block

    block是在iOS 4.0之后出现的,封装了一段代码并将这段代码当做变量,通过block()的方式进行回调,说白...

  • 关于block

    当引用到外部的变量 1 无__block关键字时,内部直接创建一个同名变量,然后赋值。所以内部变量的地址 跟外面是...

  • 关于Block

    前段时间深受block循环引用的毒害,花时间研究下。 一、Block是C语言的一种数据类型,是一段提前准备好的代码...

网友评论

      本文标题:关于block

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