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
原创粉丝点击