首页 > 代码库 > 内存管理01

内存管理01

  今天学习了OC中的内存管理,老师说这是OC中最重要的一块。

内存简单地说就是存储程序和数据的地方,有了它,程序才能在电脑和手机上正常运行。

主要来说内存分为五大区:

  1、栈区(stack)—   由编译器自动分配释放   ,存放函数的参数值,局部变量的值等。  

  2、堆区(heap)   —   一般由程序员分配释放,   若程序员不释放,程序结束时可能由OS回  
  收   。  
  3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的  
  全局变量和静态变量在一块区域,   未初始化的全局变量和未初始化的静态变量在相邻的另  
  一块区域。   -   程序结束后由系统释放。  
  4、文字常量区   —常量字符串就是放在这里的。   程序结束后由系统释放  
  5、程序代码区—存放函数体的二进制代码

OC中的对象就是放在了堆区,所以它需要我们手动释放,所以内存管理的就在OC的对象上面。

原理:当系统判断对象需不需要回收是根据对象的引用计数器是否为0,每个OC对象都有自己的引用计数器,他的值是一个整数,表示对象被引用的次数。每个对象的引用计数器的值默认是1,当对象的引用计数器为0时,对象将被系统回收。

引用计数器的操作:

【对象  + retain】是给对象发送一条retain消息,可以使引用计数器加1;

【对象 +release】是给对象发送一条release消息,可以使引用计数器减1;

NSUInteger  变量名 = 【对象 + retainCount】是获取当前对象引用计数器的值;

注意:当一个对象被回收的时候,就会自动调用(dealloc)这个对象方法;可以通过重写dealloc方法做一些事情。

    在oc 开发中会常常碰到野指针错误-就是一个指针指向了一块不可用的内存,oc中叫做“僵尸指针”  

内存管理01