美文网首页selector
block为什么要用copy?

block为什么要用copy?

作者: Leon_Jiang | 来源:发表于2018-04-16 17:32 被阅读0次

block为什么要用copy?

首先, block是一个对象, 所以block理论上是可以retain/release的. 但是block在创建的时候它的内存是默认是分配在栈(stack)上, 而不是堆(heap)上的. 所以它的作用域仅限创建时候的当前上下文(函数, 方法...), 当你在该作用域外调用该block时, 程序就会崩溃.

意思就是 : 一般情况下你不需要自行调用copy或者retain一个block. 只有当你需要在block定义域以外的地方使用时才需要copy. Copy将block从内存栈区移到堆区.

其实block使用copy是MRC留下来的也算是一个传统吧, 在MRC下, 如上述, 在方法中的block创建在栈区, 使用copy就能把他放到堆区, 这样在作用域外调用该block程序就不会崩溃. 但在ARC下, 使用copy与strong其实都一样, 因为block的retain就是用copy来实现的, 所以block使用copy还能装装逼, 说明自己是从MRC下走过来的..嘿嘿

作者:Jerry4me
链接:https://www.jianshu.com/p/5254f1277dba
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关文章

  • block学习

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

  • iOS随笔

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

  • iOS开发 Tips 一

    索引 关于MBProgressHUD 关于Block为什么要用copy关键字 delegate为什么要用weak修...

  • block为什么要用copy?

    block为什么要用copy? 首先, block是一个对象, 所以block理论上是可以retain/relea...

  • 小结iOS中的copy

    介绍copy和mutableCopy 介绍深拷贝与浅拷贝 block为什么要用copy copy相对于直接赋值的好...

  • block

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

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

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

  • block为什么要用copy?

    首先, block是一个对象, 所以block理论上是可以retain/release的. 但是block在创建的...

  • 关于block(二)----为什么使用copy,为什么使用__b

    不知道大家使用block的时候有没有想过: 为什么block赋值需要用copy? 对于全局block来说,就和全局...

  • iOS基础知识点总结

    1.理解Block的使用 1、Block为什么要用copy a、block在创建的时候默认分配的内存是在栈上,而不...

网友评论

    本文标题:block为什么要用copy?

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