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

为什么 block property 要用 copy 修饰?

作者: RYANIM | 来源:发表于2017-09-06 07:05 被阅读31次

https://stackoverflow.com/questions/27152580/cocoa-blocks-as-strong-pointers-vs-copy/27156860#27156860
最近遇到一个问题,「为什么 block 要用 copy 修饰」?

首先 block 是一个 OC 对象 「Blocks are Objective-C objects, which means they can be added to collections like NSArray or NSDictionary. 」

之前知道 在 ARC 中 block 使用 strong 或者 copy 是一致的,出于历史习惯会偏向于继续使用 copy. 那现在的问题就是为什么历史上要用 copy 呢?

Note: You should specify copy as the property attribute, because a block needs to be copied to keep track of its captured state outside of the original scope. This isn’t something you need to worry about when using Automatic Reference Counting, as it will happen automatically, but it’s best practice for the property attribute to show the resultant behavior.

You only need to make a copy when you expect the block to be used after destruction of the scope within which it was declared. Copying moves a block to the heap.

Block 不同于其他的对象,它能存在于栈中,特别是创建的时候就是在创建在栈上。类似局部变量,存在于栈上,当运行出了作用域之后,栈上的变量就被销毁了。所以 block 在栈上创建之后就被销毁了。

为此要把 block 复制到堆上,使用 block_copy()(也可以用 [block copy] 代替)。

相关文章

  • iOS随笔

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

  • block学习

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

  • 为什么 block property 要用 copy 修饰?

    https://stackoverflow.com/questions/27152580/cocoa-blocks...

  • block

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

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

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

  • 认识block以及注意事项。

    1、声明一个block 2、创建一个(property)block参数(block 使用copy修饰符) 3、创建...

  • 为什么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就像...

网友评论

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

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