iOS block 为啥官方文档建议用 copy 修饰

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS block 为啥官方文档建议用 copy 修饰相关的知识,希望对你有一定的参考价值。

参考技术A 一、block 的三种类型
block 三种类型:全局 block,堆 block、栈 block。
全局 block(NSGlobalBlock):没有访问外界局部变量的 block 就是全局 block,存储在全局区。
堆 block(NSMallocBlock):对栈 block 进行 copy 操作返回的就是堆 block,存储在堆区。
栈 block(NSStackBlock):访问了外界普通局部变量的 block 就是栈 block,存储在栈区。

二、block 建议用 copy 而不用 retain/strong 的原因
block 本质上是一个OC对象,内部有个 isa 指针,可以用 retain/strong/copy 等修饰词修饰。但是 block 在创建的时候内存默认分配在栈上,而不是堆上的。所以它的作用域仅限创建时候的作用域内,当你在该作用域外调用该 block 时,程序就会崩溃。

以上是关于iOS block 为啥官方文档建议用 copy 修饰的主要内容,如果未能解决你的问题,请参考以下文章

IOS开发 为啥要用block

为啥我不能用 `copy()` 复制切片?

为啥 Xamarin 文档建议使用单例进行数据库连接?

iOS中为什么block用copy属性

block

block要用copy修饰,还是用strong