OC基础-如何避免内存泄漏23

xiaoxiao2021-02-28  62

  1. 内存泄露.

     

     指的是1个对象没有被及时的回收.在该回收的时候而没有被回收

     一直驻留在内存中,直到程序结束的时候才回收.

 

 

  2. 单个对象的内存泄露的情况.

     

     1). 有对象的创建,而没有对应的relase

 

     2). retain的次数和relase的次数不匹配.

 

     3). 在不适当的时候,为指针赋值为nil

 

     4). 在方法中为传入的对象进行不适当的retain

 

 

  3. 如何保证单个对象可以被回收

 

     1). 有对象的创建 就必须要匹配1relase

 

     2). retain次数和release次数一定要匹配.

 

     3). 只有在指针称为野指针的时候才赋值为nil

 

     4). 在方法中布要随意的为传入的对象retain.

4.属性是OC对象的处理

  1. 当属性是1OC对象的时候. setter方法的写法.

 

     将传进来的对象赋值给当前对象的属性,代表传入的对象多了1个人使用,所以我们应该先为这个传入的对象发送1retain消息 再赋值.

 

     当当前对象销毁的时候.代表属性指向的对象少1个人使用. 就应该在deallocrelase

  2. 当属性是1OC对象的时候,setter方法照着上面那样写,其实还是有Bug.

     当为对象的这个属性多次赋值的时候.就会发生内存泄露.

     发生泄露的原因: 当为属性赋值的时候, 代表旧对象少1个人用.新对象多1个人使用.

     应该先判断一下,先判断一下属性的当前址是不是和要赋值的值是不是相等,如果不等再赋值,并对原来的值进行  

     release方法调用,对现在的值进行retain方法调用。

    还要重写dealloc方法

   - (void)setCar:(Car *)car

     {

         if(_car != car)

         {

            [_car release];

            _car = [car retain];

         }

     }

 还要重写dealloc方法.

     - (void)dealloc

     {

        [_car release];

        [super delloc];

     }

转载请注明原文地址: https://www.6miu.com/read-41870.html

最新回复(0)