关于ARC使用strong和weak的一个比喻

image.png

图片来自苹果“忽悠”我的邮件

因为今天时间关系,没有办法整理完采访稿。因此用一篇之前学习和实践iOS开发的技术分享来代替。

首先什么是ARC ?ARC是iOS 5推出的新功能,全称叫 ARC(Automatic Reference Counting)。简单地说,就是代码中自动加入了retain/release,原先需要手动添加的用来处理内存管理的引用计数的代码可以自动地由编译器完成了。我觉得目的就是能够更为智能的管理内存。

在学习iOS开发的时候,声明对象的属性的时候一般都会使用strong, nonatomic作为关键词。学习的时候比较费解,不知道具体是指什么意思,于是就在网上进行了搜索,然后无意间发现了Stackflow上一个人对于strong,weak的比喻,恍然大悟。

Stackflow链接:http://stackoverflow.com/questions/9262535/explanation-of-strong-and-weak-storage-in-ios5

weak和strong最主要的区别就是当一个对象失去它身上最后一个strong指针的时候,这个对象将会被销毁。即便此时有weak的指针指着它(关于指针和变量的问题可以去看下iOS开发入门),而且所有指向此对象的weak指针也会被清除。

回答的人举了一个特别形象的例子:

如果把对象想像成一只狗,把销毁对象想像成狗想要逃走。

那么每一个strong的指针就是一个拴狗的链子,只要有链子拴着狗那么狗就不会跑。如果五个链子拴着这条狗,直到最后一个链子被解除,否则狗是不会跑的。

weak指针比较像是一个小孩指着狗喊“看,那有一条狗”。只要狗被锁链拴着,那么小孩儿就一直可以看见狗。但是当所有锁链(strong指针)都被接触的时候,狗就跑了,不管有多少个小孩指着它。

这个比喻对我很有用,分享给大家。