码迷,mamicode.com
首页 > 其他好文 > 详细

OC自动内存释放总结

时间:2015-11-03 21:20:31      阅读:267      评论:0      收藏:0      [点我收藏+]

标签:

  1. autorelease方法不会改变对象的引用计数器,只是将这个对象放到自动释放池中;
  2. 自动释放池实质是当自动释放池销毁后调用对象的release方法,不一定就能销毁对象(例如如果一个对象的引用计数器>1则此时就无法销毁);
  3. 由于自动释放池最后统一销毁对象,因此如果一个操作比较占用内存(对象比较多或者对象占用资源比较多),最好不要放到自动释放池或者考虑放到多个自动释放池;
  4. ObjC中类库中的静态方法一般都不需要手动释放,内部已经调用了autorelease方法;  
  5. 是因为对象和其他数据类型在系统中的存储空间不一样,其它局部变量主要存放于栈中,而对象存储于堆中,当代码块结束时这个代码块中涉及的所有局部变量会被回收,指向对象的指针也被回收,此时对象已经没有指针指向,但依然存在于内存中,造成内存泄露。在每个OC对象内部,都专门有4个字节的存储空间来存储引用计数器
  6. ////
  7. - (void)setCar :(Car *)car {

    //1.先判断是不是新传进来的的对象

  8. if(_car!=car){
    1.  //对就对象做一次release
    2. [_car release];//若没有旧对象则没有影响
    3. //对新对象做一次retain
    4. _car = [car retain];
    5.   }
  9. }//////////////

 

  dealloc方法的代码规范

(1)一定要[super dealloc],而且要放到最后

(2)对self(当前)所拥有的的其他对象做一次release操作

 

内存管理相关参数

Retain:对对象release旧值,retain新值(适用于OC对象类型)

Assign:直接赋值(默认,适用于非oc对象类型)

Copy:release旧值,copy新值

 

 

 
 

OC自动内存释放总结

标签:

原文地址:http://www.cnblogs.com/crybee/p/4934275.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!