美文网首页
Block 为什么要用 copy 修饰?

Block 为什么要用 copy 修饰?

作者: 懒懒的猫 | 来源:发表于2023-02-28 14:06 被阅读0次

先说结论:在ARC下 block 可以用copy 或者 strong来修饰。

为什么 block 要用 copy 来修饰?
因为block变量默认是声明为栈变量的,为了能够在block的声明域外使用,所以要把block拷贝(copy)到堆。
block本质是对象,可以retain,和release。但是,block在创建的时候,它的内存是分配在栈上的,而不是在堆上。他本身的作用域是属于创建时候的作用域,一旦在创建时候的作用域外面调用block将导致程序崩溃。因为栈区的特点就是创建的对象随时可能被销毁,一旦被销毁后续再次调用空对象就可能会造成程序崩溃。在对block进行copy后,block存放在堆区. 使用retain也可以,但是block的retain行为默认是用copy的行为实现的,

ARC下, 使用copy与strong其实都一样, 因为block的retain就是用copy来实现的, 所以在ARC下 block使用copy 和 strong 都可以

相关文章

  • block学习

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

  • iOS随笔

    *Property属性 *沙盒 内存区域划分 Block为什么要用copy修饰 Block为什么不用retain修...

  • block

    目录 一、通常作用; 二、block用来解决什么问题? 三、为什么要用copy修饰Block; 四、为什么Bloc...

  • 9.Block的写法,及使用注意

    1.Block为什么要用copy来修饰 默认情况下,block是存档在栈中,可能被随时回收,通过copy操作可以使...

  • 为什么block要用copy修饰?

    简单的答案:首先在官方文档《Programming with Objective-C》里面写到,初学阅读的时候没有...

  • block为什么要用copy修饰

    Block分为全局Block、堆Block和栈Block 1 先将工程中的ViewController切换到MRC...

  • ios开发之修饰符copy

    在开发中,我们经常说copy用来修饰block或者nsstring字符串。那么究竟为什么要用copy而不用stro...

  • block的应用以及为什么用 copy 修饰block

    那么 block为什么要用copy修饰呢? 下面的内容来自互联网,非原创,做了一点修改。 简单来说,block就像...

  • iOS中为什么block用copy属性

    Block的声明和线程安全 Block属性的声明,首先需要用copy修饰符,因为只有copy后的Block才会在堆...

  • [转] iOS: ARC和非ARC下使用Block属性的问题

    1. Block的声明和线程安全 Block属性的声明,首先需要用copy修饰符,因为只有copy后的Block才...

网友评论

      本文标题:Block 为什么要用 copy 修饰?

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