OC的内存管理

2016-03-03  本文已影响43人  lilinjianshu

1、OC中的内存管理机制:引用计数

     每个对象都有引用计数。理论上:当对象的引用计数为0时,系统会自动调用方法,销毁对象,回收内存

     在开发中存在多个指针操作同一个对象, 如果不在需要使用对象,减少相应的引用计数

2、内存管理的方式:

     (1)MRC(手动内存管理):人工引用计数,内存的开辟和释放都由程序代码进行控制,相等垃圾回收来说,对内存的控制更加灵活,可以在内存需要释放时及时释放。

      (2)ARC(自动内存管理):自动引用计数,用户可以不用去释放空间

3、alloc  引用计数加1(本质上从0——> 1)

       Person * p = [[Person alloc]init];

        NSLog(@"%lu", p.retainCount);//注:  retainCount返回当前内存值

4、retain引用计数加1,在原有的基础上增加

Copyright:zhangjianjun

5、copy引用计数加1;被拷贝的对象的引用计数不变,新创建的对象从0增加到1

6、release引用计数减1,在原有的基础上减少

 例:

    [p release];

   NSLog(@"%lu",p.retainCount);

   [p release];

  NSLog(@"%lu",p.retainCount);

  [p release];

  NSLog(@"%lu",p.retainCount);

//此时系统销毁对象,回收内存,此时,指针p被称为野指针,不应该再使用指针p

//操作原对象调用方法,p = nil; //

//由野指针直接换为空指针,对nil操作不会出错

     [p release];

   NSLog(@"%lu",p.retainCount);  //打印结果为0;

7、autorelease 引用计数减1,在未来的某个时刻减1,如果想安全使用对象,可以通过对像调用

8、retain方法,增加对象的引用计数。持有(引用)对象

例:

   - (void)setBook: (Book *)book

  {

  _book  = [book retain];}//加retain是为了代码安全保证在调用Book 对象的时候其存在

上一篇 下一篇

猜你喜欢

热点阅读