memory-management - iOS5中强存储和弱存储的解释

标签 memory-management ios5 automatic-ref-counting

我是 iOS5 开发和使用 Objective-C 的新手。我无法理解存储和存储之间的区别。我已阅读文档和其他 SO 问题,但它们对我来说听起来都相同,没有进一步的见解。

我读到the documentation: Transitioning To ARC - 它引用了 iOS4 的保留、分配和释放条款;这让我很困惑。然后我研究了 Open U CS193p,它区分强弱:

Strong: "keep this in the heap until I don't point to it anymore"
Weak: "keep this as long as someone else points to it strongly"

这两个定义不是相同的吗=如果指针不再指向对象,则释放保存该对象的内存?我理解指针、堆、内存分配或释放的概念 - 但强和弱之间有什么区别?

最佳答案

不同之处在于,一旦没有strong指向对象的指针,该对象就会被释放。即使弱指针指向它,一旦最后一个强指针消失,该对象将被释放,所有剩余的弱指针将被清零。

也许可以举一个例子。

想象我们的对象是一只狗,并且狗想要逃跑(被释放)。

强指针就像拴狗的皮带。只要你给狗拴上皮带,狗就不会逃跑。如果五个人将皮带拴在一只狗身上(五个强指针指向一个物体),那么直到所有五个皮带都松开后,狗才会逃跑。

另一方面,弱指针就像 child 子指着狗说“看!一只狗!”只要狗仍然拴在皮带上, child 子仍然可以看到狗,他们仍然会指着它。然而,一旦所有的皮带都被松开,无论有多少 child 指着它,狗都会逃跑。

一旦最后一个强指针(约束)不再指向某个对象,该对象将被释放,所有弱指针将被清零。

关于memory-management - iOS5中强存储和弱存储的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9262535/

相关文章:

iphone - 如何使用 UIAlertStylePlainTextInput 样式在 UIAlertView 中格式化两个以上的按钮?

ios - 如何使用 ARC 在 iOS 中将对象标记为保留和只读?

iphone - 获取强烈捕获对象的 ARC 警告

objective-c - 分配内存

javascript - 这个内存泄露是怎么造成的?

ios - 背景图片不延伸整个屏幕的高度

iphone - iOS 中的自定义 UI 集成

iphone - 回调的代表数组不安全?

android - 当 Activity 进入堆栈时如何释放内存?

r - R中的高效内存管理