iOS block为什么要用copy
来源:互联网 发布:北京美工培训 编辑:程序博客网 时间:2024/06/06 05:28
//联系人:石虎 QQ: 1224614774昵称:嗡嘛呢叭咪哄
一、栈区和堆区概念
内存的栈区 : 由编译器自动分配释放, 存放函数的参数值, 局部变量的值等. 其操作方式类似于数据结构中的栈.
内存的堆区 : 一般由程序员分配释放, 若程序员不释放, 程序结束时可能由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下走过来的
谢谢!!!
阅读全文
1 0
- iOS block为什么要用copy
- iOS为什么Block的属性声明要用copy
- iOS为什么Block的属性声明要用copy
- iOS为什么Block的属性声明要用copy
- ios中为什么block用copy属性
- ios 基础Block为什么用copy修饰
- iOS block为什么用copy修饰?
- iOS之Block为什么用copy修饰
- block为什么用copy
- Block 为什么要用copy属性
- block为什么要用Copy修饰
- Block 为什么要用 Copy 修饰
- iOS中为什么block用copy来修饰
- ios-block作为属性的时候为什么用copy
- block为什么用copy关键字
- Block为什么用copy修饰
- iOS用copy修饰Block
- 从堆栈剖析block为什么用copy
- 时间格式化、定时任务
- 父进程异常退出时,确保子进程退出
- sizeof操作符关于类相关使用
- ubuntu安装python-pip问题解决
- Python3读取Excel数据存入MySQL
- iOS block为什么要用copy
- 关于spring boot org.springframework.context.ApplicationContextException:Unable to start Embedded解决方案
- java代码面向对象实现:500人围成一圈,数3退一,求最后留下的人的最初位置
- linux下如何查看一个文件是dos格式还是unix格式的?
- 深度学习之----Dropout浅层理解与实现
- php 冒泡排序
- 工欲善其事必先利器(二)——IDE——IntelliJ IDEA学习指南
- Ubuntu各个版本的镜像下载地址
- JDK的安装及环境变量的配置