美文网首页
iOS为什么Block使用copy?

iOS为什么Block使用copy?

作者: JEFF009 | 来源:发表于2020-02-01 14:49 被阅读0次

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

    其实block使用copy是MRC时代留下来的传统。 在MRC下, 在方法中的block创建在栈区, 使用copy就能把它放到堆区, 这样在作用域外调用该block程序就不会崩溃.但在ARC下, 使用copy与strong其实都一样,因为block的retain就是用copy来实现的。之所以大家都习惯用copy就是MRC时代留下的习惯。

    相关文章

      网友评论

          本文标题:iOS为什么Block使用copy?

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