黑马-OC语法-内存管理

       定义

内存管理:基本类型数据int、char、float、double、struct、enum等是存在里)由操作系统自己释放,而OC对象由程序员自己释放,不释放的花程序结束时由系统释放(),内存使用由4个字节的引用计数器来控制,当计数器为0时,对象被回收,当使用allocnew来创建一个新对象时,新对象的引用计数器默认就是1。

僵尸对象:所占内存已经被回收的对象。(僵尸对象不能被再使用

野指针:指向僵尸对的指针(不可用内存),给野指针发送消息会报错。(错误信息EXC_BAD_ACCESS)。

空指针:没有指向任何东西的指针。(储存的东西是nil,null,0)给空指针发送消息不会报错(Java会报错)。

       注:程序闪退有可能是给释放的对象发送消息


retain : 当给对象发送一条retain消息,可以使引用计数器值+1。(retain方法会返回对象本身
release:当给对象发送一条release消息计数器-1.(没有返回值
retainCount:获得当前的计数器

dealloc方法:当一个对象要被回收的时候,就会调用。 重写方法时一定要调用[super dealloc],这句调用要放在最后面。对self(当前)所拥有的其他对象做 一次release

e.g.:

- (void)dealloc

[super dealloc];

  }

 dealloc原则:

 1.你想使用(占用)某个对象,就应该让对象的计数器+1(让对象做一次retain操作)
 2.你不想再使用(占用)某个对象,就应该让对象的计数器-1(让对象做一次release)

         set方法内存管理的代码规范:

 1.如果是基本数据类型直接赋值。

        2.如果是OC对象要先对就对象做一次release,给新对象retain。

e.g.:

 - (void)setCar:(Car *)car
 {
  1.先判断是不是新传进来对象
    if ( car != _car )
    {
    2.对旧对象做一次release
        [_car release];
 
   
 3.对新对象做一次retain
        _car = [car retain];
    }
  } 

  - (void)dealloc
 {
    [_car release];
 
          [super dealloc];
}
 

        


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值