美文网首页iOS 的那些事儿iOS归纳
iOS block 为什么用copy修饰

iOS block 为什么用copy修饰

作者: jiangxuntong | 来源:发表于2018-09-27 16:49 被阅读303次

首先搞懂栈区和堆区概念

内存的栈区 :  由编译器自动分配释放, 存放函数的参数值, 局部变量的值等. 其操作方式类似于数据结构中的栈.

内存的堆区 :  一般由程序员分配释放, 若程序员不释放, 程序结束时可能由OS回收. 注意它与数据结构中的堆是两回事, 分配方式倒是类似于链表.

block用copy作用域:

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

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

2.其实block使用copy是MRC留下来的也算是一个传统吧, 在MRC下, 如上述, 在方法中的block创建在栈区, 使用copy就能把他放到堆区, 这样在作用域外调用该block程序就不会崩溃.

3.但在ARC下, 使用copy与strong其实都一样, 因为block的retain就是用copy来实现的, 所以block使用copy还能装装逼, 说明自己是从MRC下走过来的

相关文章

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

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

  • iOS高级面试

    1、修饰属性有哪几个?追问 为什么用copy?weak对象为nil的底层原理?2、block是什么?block有几...

  • block学习

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

  • iOS block 为什么用copy修饰

    首先搞懂栈区和堆区概念 内存的栈区 : 由编译器自动分配释放, 存放函数的参数值, 局部变量的值等. 其操作方式类...

  • OC中的copy

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

  • Block简单使用

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

  • Block为什么用copy修饰

    默认情况下,block是存档在栈中,可能被随时回收,通过copy操作可以使其在堆中保留一份, 相当于一直强引用着,...

  • 为什么用 copy 修饰 block

    属性可以存储一个代码块。为了让它存活到定义的块的结束,必须使用 copy (block 最早在栈里面创建,使用 c...

  • 为什么用copy修饰block

    转: 简单来说,block就像一个函数指针,指向我们要使用的函数。 就和函数调用一样的,不管你在哪里写了这个blo...

  • Block为什么用copy修饰

    Block简介: block其实就是一个代码块,把你想要执行的代码封装在这个代码块里,等到需要的时候再去调用。那b...

网友评论

    本文标题:iOS block 为什么用copy修饰

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