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


  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];

     }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值