浅谈OC内存管理机制

10 篇文章 0 订阅
1 篇文章 0 订阅

      OC内存管理是通过管理对象的引用计数来实现,其规则为:谁创建谁释放,谁引用(retain)谁管理。

      管理方式分两种:ARC(自动引用计数)、MRC(手动引用计数),下面就这两种方式进行叙述:


1、ARC


     Automatic Reference Counting(自动引用计数)

      ARC环境下变量修饰符有__strong、__weak、__unsafe_unretained
(1)__strong,对象不指定修饰词的话默认为__strong,强引用指向的对象不会被释放,局部对象直到方法结束后才释放。

(2)没有强指针指向的对象会立即释放,即__weak修饰的对象若没有用__strong修饰,则刚创建就会被释放。

(3)__weak修饰的对象释放后,__weak指针自动置为nil。

(4)__weak修饰的对象不论局部还是全局,均是刚创建就会被释放。

(5)在ARC中判断对象是否会被释放,就看是否有__strong指针指向,有则不会释放,没有则会释放。

(6)ARC中不会出现野指针(指向僵尸对象(不可用的内存)的指针),原因:对象若有强指针指向则不会释放也不会成为僵尸对象,若没有强指针指向,则释放该对象,同时将__weak指针置空,因此也不会出现野指针。

(7)在ARC情况下,在@property时可以使用retain,只是编译时会自动将其转成__strong。

(8)本类对象释放时 系统自动释放全局对象。

(9)__weak的存在是为了解决内存泄露问题。(两个对象相互引用,则其中一个使用__weak可避免循环引用)。



2、MRC


      Manual Reference Counting(手动引用计数)

学会手动管理内存,需要知道OC中哪些关键字会让对象的引用计数发生变化,如下:

向对象发送以下消息会让对象的引用计数加1:


      alloc、new、retain、addSubview、addObject、push(这里不止加1,加的数值不确定。)等。


向对象发送以下消息会让对象的引用计数减1:


      release、autorelease、removeFromSuperview、removeObject、pop(这里不止减1,减的数值不确定。与前面的pop对应)等。

注:alloc/new与release/autorelease应成对出现。

知道了这些规则,MRC的核心你就基本掌握了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值