iOS 知识梳理-内存
来源:互联网 发布:it行业发展前景 编辑:程序博客网 时间:2024/06/15 22:03
内存分布
1.堆:OC对象
2.栈:局部变量
3.数据区:存的静态变量和字符串常量。
4.代码区:存放代码
堆栈的区别
从执行方式来看:
栈:先进后出。
从分配空间大小来看:
堆:空间较大,并且较为灵活。它的大小受计算机系统的虚拟内存控制。
栈:空间较小。
从分配空间方式来看:
堆:动态分配。(就是alloc)
栈:静态分配+动态分配。(局部变量)
从管理方式来看:
堆:需要我们自己对其进行处理。
栈:不需要我们处理,由编译器自己处理。
MRC(手动内存管理)
原则:当一个对象的引用计数器为0的时候,这个对象将会被回收。
法则:
谁调用alloc|new|retain|copy|mutableCopy, 谁就需要调用release|autorelease
copy与mutableCopy的区别
copy又名浅拷贝,在拷贝过程中,计数器加一,但是不拷贝地址。
mutableCopy又名深拷贝,在拷贝过程中,计数器加一,不仅拷贝内容还要拷贝其地址。
@property中的关键字
1.retain 在setter和getter方法中加入内存管理的代码。
2.assign直接复制,不会产生内存管理的代码。
3.copy复制对象,来修饰不可以改变的变量(因此array用copy修饰)。
4.nonatomic非原子,会造成线程安全的问题,不过速度比较快。
5.atomic原子,在set和get方法中会加入锁(@sychronized(self))。
6.readonly仅读,只生成getter方法。
7.readwrite可读可写,生成getter和setter方法。
8.weak弱引用,谁借用谁weak
9.strong强引用,谁拥有谁strong
10.autorelease自动释放,它的实质就是延迟版release。它是autoreleasepool的标记。
11.release释放,引用计数器减一。
自动释放池(autoreleasepool)
自动释放池:它的本质就是一个栈。
作用:延迟对象的生命周期。
它与对象的创建没有关系,只要被autorelease标记上就会被放进离自己最近的一个自动释放池中。
当自动释放池销毁的时候,会对池中的所有标记对象进行一次release操作。
0 0
- iOS 知识梳理-内存
- iOS知识梳理
- 内存知识梳理 4. 内存管理
- 内存知识梳理 3. Bootmem机制
- 知识梳理
- 知识梳理
- 知识梳理
- 知识梳理
- 知识梳理
- 指针知识梳理4-堆内存的使用
- 指针知识梳理5-字符串与指针,程序内存总结
- 关于iOS uinavigationcontroller及Uitabbarcontroller知识的梳理
- IOS内存原理知识介绍
- 知识梳理--查询
- plsql知识梳理-连接
- plsql知识梳理-视图
- plsql知识梳理-序列
- plsql知识梳理-约束
- LeetCode笔记:268. Missing Number
- 使用zrtZoom放大旋转图片(笔记)
- 图片处理之裁剪图片
- Linux下NTP服务搭建
- 图片加载利器--Fresco
- iOS 知识梳理-内存
- 无线键鼠监听与劫持
- ZStack获得阿里云领投数千万A轮投资并发布混合云战略
- 集成包 安装lnmp小结
- iOS 9之适配ATS
- 设置监听class改变事件,由原来的设置单个按钮点击触发方法onclick=“方法()”改为addEventListener
- Android博客周刊专题之#插件化开发#
- JDK之ArrayList源码解析
- 第十四天(Session)