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新值

     
     
     
  • 相关阅读:
    第十二章学习笔记
    UVa OJ 107 The Cat in the Hat (戴帽子的猫)
    UVa OJ 123 Searching Quickly (快速查找)
    UVa OJ 119 Greedy Gift Givers (贪婪的送礼者)
    UVa OJ 113 Power of Cryptography (密文的乘方)
    UVa OJ 112 Tree Summing (树的求和)
    UVa OJ 641 Do the Untwist (解密工作)
    UVa OJ 105 The Skyline Problem (地平线问题)
    UVa OJ 100 The 3n + 1 problem (3n + 1问题)
    UVa OJ 121 Pipe Fitters (装管子)
  • 原文地址:https://www.cnblogs.com/crybee/p/4934275.html
Copyright © 2011-2022 走看看