美文网首页
关于Block一些思考

关于Block一些思考

作者: 践行者 | 来源:发表于2016-08-25 17:53 被阅读28次

本质

一个block本质上就是一个函数指针,即那个代码快的内存地址;捕获上下文变量的内存块(结构体或者类)

定义

<#returnType#> (^<#blockName#>) (<#parameterTypes#>) = ^ (<#parameters#>) {
<#statements#>
};
returnType : 返回值类型
blockName : block命名
parameterTypes : 参数类型
parameters : 参数

内存管理

  • 在Block中, 如果只使用全局或静态变量或不使用外部变量, 那么Block块的代码会存储在全局区;

  • 使用了外部变量,在ARC中, Block块的代码会存储在堆区;
    在MRC中, Block快的代码会存储在栈区;

  • block默认情况下不能修改外部变量, 只能读取外部变量:

在ARC中, 外部变量存在堆中, 这个变量在Block块内与在Block块外地址相同;外部变量存在栈中, 这个变量会被copy到为Block代码块所分配的堆中;

在MRC中, 外部变量存在堆中, 这个变量在Block块内与Block块外相同;外部变量存在栈中, 这个变量会被copy到为Block代码块所分配的栈中;

  • 如果需要修改外部变量, 需要在外部变量前面声明 __block

在ARC中, 外部变量存在堆中, 这个变量在Block块内与Block块外地址相同; 外部变量存在栈中, 这个变量会被转移到堆区, 不是复制, 是转移.

在MRC中, 外部变量存在堆中, 这个变量在Block块内与Block块外地址相同;外部变量存在栈中, 这个变量在Block块内与Block块外地址相同;

参考

http://www.zhihu.com/question/30779258

相关文章

  • 关于Block一些思考

    本质 一个block本质上就是一个函数指针,即那个代码快的内存地址;捕获上下文变量的内存块(结构体或者类) 定义 ...

  • 关于block的一些思考

    block简单来说就是一个回调,用来实现数据的方向传递,延时后的数据传递。但是block有一个比较让人头疼的地方,...

  • block底层实现

    最近读书,关于block的底层实现,有以下思考和总结 c++部分的相关步骤分析写在代码注释 一、block是什么 ...

  • 关于Block的几点思考

    背景 block的问题算是老生常谈了,本以为对block很熟悉了,但是前几天跟同事聊到几个block的很有意思的点...

  • 前端学习第二天 CSS层叠和属性

    1 关于 inline block inline-block的一些注意点: 是行内块标签 文字的高度 行高: in...

  • iOS面试之Block大全

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

  • iOS面试之Block模块

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

  • iOS-block3-__block变量的内存管理、__forw

    上文讲了一下__block的原理,但是关于__block还有一些其他东西,这篇文章就来慢慢讲述。 一. __blo...

  • 关于Block一些记录

    大概两三周前通过学习《Objective-C高级编程 iOS与OS X多线程和内存管理》中的Block章节,系统深...

  • iOS关于换肤和夜间模式的一些思考

    iOS关于换肤和夜间模式的一些思考 iOS关于换肤和夜间模式的一些思考

网友评论

      本文标题:关于Block一些思考

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