美文网首页
block用copy修饰

block用copy修饰

作者: 世玉茹花 | 来源:发表于2017-08-14 17:38 被阅读16次

block快的存储位置(block入口的地址)可能存放在3个地方:代码区(全局区)、堆区、栈区(ARC情况下回自动拷贝到堆区、因此ARC下只有两个地方:代码区和堆区)。

我们将block声明为copy的原因是在代码块里面我可能会使用一些本地变量。而block一开始是放在栈上的,只有copy后才会放到堆上。如果不加copy属性,当其所在栈被释放的时候,这些本地变量将变得不可访问。一旦代码执行到block这段就会导致bad access。

Block如果没有引用外部变量

保存在全局区(MRC/ARC一样)

Block如果引用外部变量

ARC保存在 堆区(默认进行copy); MRC保存在 栈区必须用copy修饰block;

相关文章

  • block学习

    block为什么是用copy修饰 block属性的声明,首先需要用copy修饰符,因为只有copy后的block才...

  • Block简单使用

    block用copy修饰block里不能改变block外面的变量,如果需要改变必须在变量前面加__block 修饰...

  • block用copy修饰

    block快的存储位置(block入口的地址)可能存放在3个地方:代码区(全局区)、堆区、栈区(ARC情况下回自动...

  • block内存管理和循环引用

    block内存管理 MRC: 在mrc中没有strong和weak;用copy修饰block;因为block刚刚声...

  • OC中的copy

    1.所有被copy修饰的对象都会进行深copy吗? 答案:NO,例如block 全局block被copy修饰不会有...

  • block作为类的属性时用copy

    1. block作为类的属性时用copy Block属性的声明,首先需要用copy修饰符,因为只有copy后的Bl...

  • block相关的内容

    copy: block用copy修饰这个是大家所知道,那么具体的原因如下: block在创建的时候它的内存是默认是...

  • iOS进阶 - Block底层原理

    Block简介 Block的使用 1.Block属性 通常我们用copy来修饰Block属性,其实在ARC下系统已...

  • iOS 关于block前缀的理解

    关于block:修饰符 用copy(要从堆区 拷贝到栈区) 前缀修饰符: __block:默认情况下,bloc...

  • 2019 iOS面试题大全---全方面剖析面试(下)

    1、iOS block 的原理,block 的属性修饰词为什么用 copy,使用 block 时有哪些要注意的? ...

网友评论

      本文标题:block用copy修饰

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