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修饰 & 避免循环引用的问题