我正在用 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/