ARC是如何工作的

一.ARC是如何工作的 
你可能已经适应了手动管理内存的分配与回收。它的原理是这样的:当你需要在内存中保持一个对象,那么你需要retain它,除非它已经被自动retain了。当你不再使用一个对象时,你需要release它,除非它已经被autorelease掉了。 
这种手动管理内存的方式虽然不难,但是非常容易出错。无论是你多次的release了某对象,还是你的变量指向了一个不在存在的数据,或者是由于你没有release掉足够多的对象导致内存耗尽,都会造成程序的crash。 
虽然静态分析工具staticanalyze在寻找错误方面有帮助,但是ARC做的更加出色。它通过在编译阶段,而不是程序运行时,在程序的适当位置添加retain或release方法来帮你管理内存。 
二.strong指针保存了对象的生命 
ARC的新规则非常简单,你需要做的只是将指针指向对象。只要还有strong类型的指针指向对象,这个对象就不会被释放。当指向这个对象的指针指向了其他对象或者被释放,这个对象就会被释放掉。这个规则对于实例变量,属性,甚至是局部变量都是适用的。 
                               
firstName与self.textField.text都指向同样的string对象。该string对象保存了用户的一段文本输入。 
 
当用户改变了文本,则self.textField.text指向新的string对象“Rayman”。但firstName仍然指向之前的string对象“Ray”。所以string对象“Ray”依然有指针指向它,因此它不会被释放。 
 
但是当firstName指向一个新的对象时,string对象“Ray”由于没有任何strong类型的指针指向它,它就被释放掉了。 
三.Weak指针不能保持对象的生命 
 
weakName是指向string对象“Rayman”的weak指针。 
 
当string对象“Rayman”没有strong类型的指针指向它时,它被释放掉。同时,指向它的weak指针weakName也会被设置为nil。 
Weak指针主要用于存在父子关系的两个对象中,以避免相互retain造成二者都无法被释放的retain cycle出现。 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值