我有点理解保留的重要性。但不完全。我在谷歌上看了很多试图理解,但我仍然没有。
现在我正在编写一些代码(我正在做 iPhone 开发),我认为我应该使用它们,但完全不知道如何使用它们。
有人可以给我一个快速而好的例子来说明如何以及为什么使用它们吗?
谢谢!
我有点理解保留的重要性。但不完全。我在谷歌上看了很多试图理解,但我仍然没有。
现在我正在编写一些代码(我正在做 iPhone 开发),我认为我应该使用它们,但完全不知道如何使用它们。
有人可以给我一个快速而好的例子来说明如何以及为什么使用它们吗?
谢谢!
我听过的最好的解释来自 Aaron Hillegass:
把物体想象成一条狗。你需要一条狗链来防止它逃跑和消失,对吧?
现在,把 a 想象retain
成一条皮带。每次你打电话时retain
,你都会在狗的项圈上系上皮带。你在说,“我想让这只狗留下来。” 你抓住皮带确保狗会一直待到你完成它。
想象一下release
从狗的项圈上取下一条皮带。当所有的皮带都被移除时,狗可以逃跑。不能保证这只狗会再出现。
现在,假设你打电话retain
给狗系上皮带。我也需要这条狗,所以我和你一起走,开始训练它。当你和狗打完后,你打电话release
并取下你的皮带。没有更多的皮带,狗跑了,尽管我还在训练他!
相反,如果我retain
在开始训练它之前召唤它,我的项圈上有第二条皮带。当你打电话release
并解开你的皮带时,我还有一条,狗还不能走开。
retain
不同的物体可以通过呼叫并在其项圈上系上另一条皮带来“拥有”狗。每个对象都确保狗在完成之前不会离开。直到所有的皮带都被移除,狗才能离开。
自动释放池变得更加复杂,但简单地说,您可以将调用autorelease
视为将您的皮带交给教练。你不再需要这条狗了,但你还没有马上解开你的皮带。训练师稍后会解下皮带;仍然不能保证当你需要它时它会在你身边。
如果您还没有,我强烈建议您熟悉Apple 的内存管理编程指南
在那里你会找到一个专门关于保留计数的部分