zoukankan      html  css  js  c++  java
  • OC自动内存释放总结

    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操作

    dealloc 也是用来释放资源的 ,跟viewDidUnload的关系:

       当发出内存警告调用viewDidUnload方法时,只是释放了view,并没有释放UIViewController。所以并不会调用dealloc方法。即viewDidUnload和dealloc方法并没有任何关系,dealloc方法只会在UIViewController不被释放的时候调用。

    内存管理相关参数

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

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

    Copy:release旧值,copy新值

     
     
     
  • 相关阅读:
    C#小常识集锦(一)《更锋利的CSharp代码》读书笔记
    QueryBuilder 优雅的Linq To SQL动态查询(转)
    了解 NoSQL 的必读资料
    微软报表
    linq to sql 中,如何解决多条件查询问题,答案,用表达式树! (下)
    LINQ体验(17)——LINQ to SQL语句之动态查询
    细数那些运行在微软平台上的NoSQL数据库
    5道经典的程序题
    打造自己的LINQ Provider(中):IQueryable和IQueryProvider (转 李会军)
    Expression Examples :Report Builder
  • 原文地址:https://www.cnblogs.com/crybee/p/4934275.html
Copyright © 2011-2022 走看看