美文网首页收藏ios
block的修饰为什么用copy

block的修饰为什么用copy

作者: 奋斗的遗忘人 | 来源:发表于2018-11-25 17:16 被阅读8次

相信有很多面试者被问到这样的问题:block使用什么修饰,往往能够答出是copy,很多面试官就会问到:为什么要使用copy,这时候就懵了。

block本身是像对象一样可以retain,和release。但是,block在创建的时候,它的内存是分配在栈上的,而不是在堆上。他本身的作于域是属于创建时候的作用域,一旦在创建时候的作用域外面调用block将导致程序崩溃。因为栈区的特点就是创建的对象随时可能被销毁,一旦被销毁后续再次调用空对象就可能会造成程序崩溃,在对block进行copy后,block存放在堆区.

使用retain也可以,但是block的retain行为默认是用copy的行为实现的,

因为block变量默认是声明为栈变量的,为了能够在block的声明域外使用,所以要把block拷贝(copy)到堆,所以说为了block属性声明和实际的操作一致,最好声明为copy。

相关文章

  • iOS高级面试

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

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

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

  • block学习

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

  • OC中的copy

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

  • Block简单使用

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

  • block

    block为什么用copy修饰? 因为在MRC下block默认是存储在栈上的,栈上的内存很可能随时会被释放,blo...

  • Block为什么用copy修饰

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

  • 为什么用 copy 修饰 block

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

  • 为什么用copy修饰block

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

  • Block为什么用copy修饰

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

网友评论

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

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