Oc内存管理

对象的声明周期
  a 对象的初始化(alloc new copy)
 b 对象接收消息和执行操作
 c 对象被释放
   
引用计数
 a 当对象刚被创建时,初始值为1
 b 访问对象时,计数器加1(通过retain来实现)
  c 结束访问时,计数器减1 (通过release来实现)
  d 结束访问时,如采用autorelease方式,在当前自动释放池结尾会将该对象的引用计数器减1
 e 当对象计数器为0时,其他代码不再访问该对象,销毁,回收内存
eg:- (void) setEngine: (Engine *) newEngine{
            if (engine != newEngine) {
              [engine release];
              engine = [newEngine retain];
              }
            }

对象的所有权:(拥有一个对象)
     •某个对象一旦拥有另外一个对象,那么这个对象要确保对其拥有的另外一个对象进行清理
•              一个对象有其他对象类型的实例变量称为拥有这些对象
               一个函数中创建了一个对象的局部变量,则称这个函数拥有这个对象
               有可能多个对象同时都拥有一个特定的对象,这种所有权更加复杂
          内存管理基本原则:  谁创建,谁释放

          

        ARC在编译期间为每个对象添加合适的retain、    release、autorelease等方法,保证每个变量的生成周期控制在合理的范围内,达到和手动管理内存同样的效果

         •使用ARC时不用关心临时变量的释放
         •__strong
        –变量声明缺省都带有 __strong ,对象持有者
         •__weak
        –不是对象持有者,然后对象销毁时被置为 nil
         •__unsafe __unretained
        –类似 __weak ,但是对象销毁时不被置为 nil
         •__autoreleasing
        –即当希望方法返回时对象被autoreleased,那么使用该关键字
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值