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

     
     
     
  • 相关阅读:
    <Android 应用 之路> 聚合数据SDK
    AngularJS所有版本下载地址
    <Android 应用 之路> 天气预报(三)
    <Android 应用 之路> 天气预报(二)
    Java集合框架—Set
    HBase数据模型(2)
    HBase数据模型(1)
    ESP8266串口WiFi扩展板详解
    Arduino ESP8266编程深入要点
    <Android Framework 之路>多线程
  • 原文地址:https://www.cnblogs.com/crybee/p/4934275.html
Copyright © 2011-2022 走看看