swift - 在 Swift 中哪些变量应该使用weak var?我如何找出泄漏点?

标签 swift automatic-ref-counting

我正在用 Swift 构建一个应用程序。我完全以程序化的方式创建我的观点。在某些情况下,我有一个 ViewController 来实例化自定义 View 。此外,我可能有像“var User”这样的变量,它在 Alamofire 网络调用后填充,并在整个 View Controller 的各种 UI 元素中使用。除了将委托(delegate)声明为弱变量之外,还有其他适用的规则吗?

另外,有没有办法让我弄清楚我是否有一个应该是弱引用的强引用?我应该寻找什么?

最佳答案

Swift 中引用计数背后的基本概念是所有权。对象应该对它们“拥有”的任何其他对象保持强引用,因为它们单独或与其他对象一起负责另一个对象的生命周期。

典型应用程序中的许多对象引用图都是分层的 - 一个对象拥有一堆其他对象,每个对象都有自己的子对象,等等。例如,ViewController 拥有它的窗口,窗口拥有它的 View ,每个对象都拥有它的 View 。 View 拥有它的 subview ,每个 subview 拥有它显示的图像、字符串或其他内容。这些都是强有力的引用。

弱引用通常用于不暗示所有权的引用。委托(delegate)示例是一个很好的示例 - 在大多数情况下, View 拥有该委托(delegate)。委托(delegate)对象具有独立于 View 的生命周期。在许多情况下,委托(delegate)将是最初创建/拥有 View 的同一对象,例如 ViewController。

想要一个从“子”到其“父”的强引用。这会创建一个循环引用,子级和父级都将在内存中徘徊,直到应用程序退出。

除了委托(delegate)和其他“向后指向”引用之外,您还会看到缓存中使用的弱引用,您希望在第二次请求时快速返回对象,但缓存不应保留该对象如果当前没有人使用它,则在内存中。

关于swift - 在 Swift 中哪些变量应该使用weak var?我如何找出泄漏点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38405666/

相关文章:

swift - 自定义 CollectionView

linux - Coral 开发板 hdmi arc 输入/输出错误

ios - block 递归和中断保留循环

objective-c - 使用 ARC 延迟释放包含的对象?

swift - 改变平面中顶点的位置

ios - presentViewController 在 Swift 中不工作

objective-c - 使用 ARC 的原始数据类型的综合属性——弱还是赋值?

iphone - 这是 ARC 下的泄漏吗?

swift - 传递给函数的 CoreData 类型

ios - 将 Pod 添加到 Xcode 项目会阻碍构建